Я нашел несколько открытых/бесплатных программ, которые позволяют конвертировать .doc файлов .файлы PDF, но они'вновь все приложения/различные драйвера принтера, без СДК прилагается.
Я нашел несколько программ, которые имеют пакет SDK позволяет конвертировать .doc файлов .PDF-файлы, но они'вновь все собственный тип, $2000 в лицензии или около того.
Кто-нибудь знает любой чисто, недорого (желательно бесплатно) программные решения моей проблемы, используя C# или VB.NET?
Спасибо!
Использовать цикл foreach вместо for цикл - это решить мою проблему.
int j = 0;
foreach (Microsoft.Office.Interop.Word.Page p in pane.Pages)
{
var bits = p.EnhMetaFileBits;
var target = path1 +j.ToString()+ "_image.doc";
try
{
using (var ms = new MemoryStream((byte[])(bits)))
{
var image = System.Drawing.Image.FromStream(ms);
var pngTarget = Path.ChangeExtension(target, "png");
image.Save(pngTarget, System.Drawing.Imaging.ImageFormat.Png);
}
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}
j++;
}
Вот это модификация программы, которая работала для меня. Он использует Word 2007 с Сохранить как PDF добавить-в установлен. Его поиски в каталоге .doc-файлы, открывает их в Word и затем сохраняет их в формате PDF. Обратите внимание, что вы'll необходимо, чтобы добавить ссылку на Microsoft.Офис.- Взаимодействия.Слово решение.
using Microsoft.Office.Interop.Word;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
...
// Create a new Microsoft Word application object
Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();
// C# doesn't have optional arguments so we'll need a dummy value
object oMissing = System.Reflection.Missing.Value;
// Get list of Word files in specified directory
DirectoryInfo dirInfo = new DirectoryInfo(@"\\server\folder");
FileInfo[] wordFiles = dirInfo.GetFiles("*.doc");
word.Visible = false;
word.ScreenUpdating = false;
foreach (FileInfo wordFile in wordFiles)
{
// Cast as Object for word Open method
Object filename = (Object)wordFile.FullName;
// Use the dummy value as a placeholder for optional arguments
Document doc = word.Documents.Open(ref filename, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing);
doc.Activate();
object outputFileName = wordFile.FullName.Replace(".doc", ".pdf");
object fileFormat = WdSaveFormat.wdFormatPDF;
// Save document into PDF Format
doc.SaveAs(ref outputFileName,
ref fileFormat, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing);
// Close the Word document, but leave the Word application open.
// doc has to be cast to type _Document so that it will find the
// correct Close method.
object saveChanges = WdSaveOptions.wdDoNotSaveChanges;
((_Document)doc).Close(ref saveChanges, ref oMissing, ref oMissing);
doc = null;
}
// word has to be cast to type _Application so that it will find
// the correct Quit method.
((_Application)word).Quit(ref oMissing, ref oMissing, ref oMissing);
word = null;
В итоге для пользователей VB.NET бесплатный вариант (должен быть установлен):
Скачать Майкрософт офис части:
Добавить ссылку на Microsoft.Офис.- Взаимодействия.Слово.Приложение
Добавить использование или импорт (vb.net) заявление в корпорацию Майкрософт.Офис.- Взаимодействия.Слово.Приложение
Пример VB.NET :
Dim word As Application = New Application()
Dim doc As Document = word.Documents.Open("c:\document.docx")
doc.Activate()
doc.SaveAs2("c:\document.pdf", WdSaveFormat.wdFormatPDF)
doc.Close()
PDFCreator в есть com-компонент, вызываемый из .Чистая или VBScript (образцы включены в загрузку).
Но, мне кажется, что принтер-это то, что вам нужно - просто смешать с Слово'ы автоматизации, и вы должны быть хорошо идти.
Просто хотел добавить, что я использовал Microsoft.Взаимодействие с библиотеками, в частности функции ExportAsFixedFormat, которую я не видел использовал в этой теме.
using Microsoft.Office.Interop.Word;
using System.Runtime.InteropServices;
using System.IO;
using Microsoft.Office.Core;Application app;
public string CreatePDF(string path, string exportDir)
{
Application app = new Application();
app.DisplayAlerts = WdAlertLevel.wdAlertsNone;
app.Visible = true;
var objPresSet = app.Documents;
var objPres = objPresSet.Open(path, MsoTriState.msoTrue, MsoTriState.msoTrue, MsoTriState.msoFalse);
var pdfFileName = Path.ChangeExtension(path, ".pdf");
var pdfPath = Path.Combine(exportDir, pdfFileName);
try
{
objPres.ExportAsFixedFormat(
pdfPath,
WdExportFormat.wdExportFormatPDF,
false,
WdExportOptimizeFor.wdExportOptimizeForPrint,
WdExportRange.wdExportAllDocument
);
}
catch
{
pdfPath = null;
}
finally
{
objPres.Close();
}
return pdfPath;
}
Там'ы всего обсуждение библиотек для преобразования Word в PDF по Джоэл'ы обсуждение форуме. Некоторые предложения из потока:
Я прошел через Word в PDF боль, когда кто-то бросил меня с 10000 файлов Word конвертировать в PDF. Теперь я сделал это в C# и использовать слово-взаимодействия, но он был медленным и разбился, если бы я попытался использовать компьютер на всех.. очень неприятно.
Это привело меня к открытию я могу сбросить interops и их медлительность..... для Excel я использую (EPPLUS) и тогда я обнаружил, что можно получить бесплатный инструмент под названием шпиль, который позволяет конвертировать в формат PDF... с ограничениями!
http://www.e-iceblue.com/Introduce/free-doc-component.html#.VtAg4PmLRhE
Какая релевантная информация здесь:
https://stackoverflow.com/questions/159744/converting-ms-word-documents-to-pdf-in-asp-net
Кроме того, с Office 2007, имеющих публикации в PDF функциональность, я думаю, вы могли бы использовать автоматизацию офиса для открытия *.Файл DOC в Word 2007 и сохранить как PDF. Я'м не слишком заинтересованы в автоматизации делопроизводства, как это'ы медленно и склонны к висит, но просто бросали, что там...
Майкрософт PDF файл в Word, как представляется, быть лучшим решением, но вы должны учитывать, что он не преобразует правильно все документы Word в PDF, и в некоторых случаях вы увидите огромную разницу между словом и вывода PDF. К сожалению, я не мог'т найти любой API, который будет конвертировать все текстовые документы правильно. Единственное решение я нашел, чтобы обеспечить преобразование было 100% правильно было путем преобразования документов с помощью драйвера принтера. Недостатком является то, что в очереди документов и реализовал один на один, но вы можете быть уверены в результате PDF-файл точно так же, как слово макет документа. Я лично предпочел бы использовать УДК (универсальный конвертер документов) и установлена программа Foxit Reader(бесплатная версия) на сервер то печатные документы, начиная с "Процесс" и присвоить его свойству глагола, чтобы "печать" по. Вы также можете использовать filesystemwatcher для установить сигнал, когда преобразование завершено.
Простота кода и решение с помощью Майкрософт.Офис.- Взаимодействия.Слово к converd слово в PDF
using Word = Microsoft.Office.Interop.Word;
private void convertDOCtoPDF()
{
object misValue = System.Reflection.Missing.Value;
String PATH_APP_PDF = @"c:\..\MY_WORD_DOCUMENT.pdf"
var WORD = new Word.Application();
Word.Document doc = WORD.Documents.Open(@"c:\..\MY_WORD_DOCUMENT.docx");
doc.Activate();
doc.SaveAs2(@PATH_APP_PDF, Word.WdSaveFormat.wdFormatPDF, misValue, misValue, misValue,
misValue, misValue, misValue, misValue, misValue, misValue, misValue);
doc.Close();
WORD.Quit();
releaseObject(doc);
releaseObject(WORD);
}
Добавьте эту процедуру для освобождения памяти:
private void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
//TODO
}
finally
{
GC.Collect();
}
}