Я нашел несколько программ с открытым исходным кодом /freeware, которые позволяют вам конвертировать файлы .doc в файлы .pdf, но все они являются разновидностями драйверов приложений/принтеров, без добавления SDK.
Я нашел несколько программ, у которых есть SDK, позволяющий конвертировать файлы .doc в файлы .pdf, но они все принадлежат к типу собственности, 2000 долларов или лицензии или около того.
Кто-нибудь знает о каком-либо чистом, недорогом (желательно бесплатном) программном решении моей проблемы, используя С# или 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. Обратите внимание, что вам нужно добавить ссылку на Microsoft.Office.Interop.Word на решение.
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 Office:
Добавить ссылку на Microsoft.Office.Interop.Word.Application
Добавить использование или импорт (vb.net) в Microsoft.Office.Interop.Word.Application
Пример 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, вызываемый из .NET или VBScript (образцы, включенные в загрузку).
Но мне кажется, что принтер - это именно то, что вам нужно - просто смешайте это с Автоматизация Word, и вам должно быть хорошо перейти.
В целом обсуждение библиотек для преобразования Word в PDF на Joel дискуссионные форумы. Некоторые предложения из потока:
Просто хотел добавить, что я использовал библиотеки Microsoft.Interop, в частности функцию 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 baseFileName = Path.GetFileNameWithoutExtension(path);
var pdfFileName = baseFileName + ".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 боль, когда кто-то бросил меня с 10000 текстовыми файлами для преобразования в PDF. Теперь я сделал это на С# и использовал Word interop, но он был медленным и разбился, если я вообще пытался использовать ПК.. очень сложно.
Это привело меня к обнаружению, что я мог бы сбросить interops и их медленность..... для Excel, который я использую (EPPLUS), а затем я обнаружил, что вы можете получить бесплатный инструмент Spire, который позволяет конвертировать в PDF... с ограничениями!
http://www.e-iceblue.com/Introduce/free-doc-component.html#.VtAg4PmLRhE
Когда я наткнулся на некоторые проблемы с автоматизацией на стороне сервера, мы рассмотрели технику, описанную здесь, на codeproject. Он использует переносимую версию (которая может быть развернута через xcopy) OpenOffice в сочетании с макросом. Хотя мы еще не сделали этого переключателя, он выглядит очень перспективным.
Я делаю это как часть процесса выпуска - конвертируйте Word Doc в PDF.
http://www.suodenjoki.dk/us/productions/articles/word2pdf.htm а также http://www.oooforum.org/forum/viewtopic.phtml?t=3772&highlight=pdf+form
не совсем программно, но может помочь вам.
Я был впечатлен Gembox (http://www.gemboxsoftware.com/), которые предоставляют ограниченную бесплатную редакцию управления документами (включая преобразование PDF). Они также делают библиотеки для электронных таблиц. Лицензия 1 разработчика, если вы превысите их пределы (что, я думаю, вы это сделаете), составляет около 580 долларов (http://www.gemboxsoftware.com/document/pricelist). Хорошо, это не бесплатно (или, на мой взгляд, относительно недорого), но это намного дешевле, чем 2000 долларов. Насколько я понимаю, из их прайс-листа нет роялти для развертывания сервера. Возможно, стоит приблизиться к ним и посмотреть, будут ли они делать сделку, если вы не хотите откатывать свои собственные.
Пока у вас установлен Word 2010 или более поздняя версия, вы можете использовать DocTo, который предоставляет приложение командной строки для этого.
Microsoft PDF надстройка для слова, по-видимому, является лучшим решением на данный момент, но вы должны принять во внимание, что он не конвертирует все словарные документы правильно в pdf, и в некоторых случаях вы увидите огромную разницу между словом и выходом PDF. К сожалению, я не смог найти api, который бы правильно конвертировал все текстовые документы. Единственное решение, которое я нашел для обеспечения конверсии, было на 100% правильным, это преобразование документов через драйвер принтера. Недостатком является то, что документы помещаются в очередь и конвертируются один за другим, но вы можете быть уверены, что приведенный pdf файл точно такой же, как и документ-макет документа. Я лично предпочел использовать UDC (Universal document converter) и установил Foxit Reader (бесплатную версию) на сервере, а затем распечатал документы, запустив "Процесс" и установив для своего свойства Verb "print". Вы также можете использовать FileSystemWatcher для установки сигнала после завершения преобразования.
Я использовал ABCpdf, который является программным вариантом и не был слишком дорогим, 300 долларов США/лицензия. Он работает либо с OpenOffice, либо возвращается к Word, если OpenOffice недоступен. Настройка была немного сложной с разрешениями OpenOffice COM, но определенно стоить аутсорсинг этой части приложения.
Кажется, здесь есть какая-то релевантная информация:
Преобразование документов MS Word в PDF в ASP.NET
Кроме того, при работе Office 2007 с публикацией в PDF-функции, я думаю, вы могли бы использовать автоматизацию офиса, чтобы открыть файл *.DOC в Word 2007 и Сохранить как PDF. Я не слишком увлекаюсь офисной автоматикой, поскольку он медленный и склонный к зависанию, но просто бросая это там...
Я использовал iTextSharp для создания PDF файлов раньше. Это порт с открытым исходным кодом iText из мира Java и довольно мощный.
Я явно не делал преобразования Word в PDF, но я программно создал и манипулировал с ним PDF файлами.
Вот еще один ссылка для проекта.
pandoc manual.docx -o manual.pdf