Примитивный, но добавляют #
в начале каждой строки сервиса.
У меня нет кода для преобразования DocX в PDF, но, похоже, ваши требования к DocX не являются жесткими. В вашем последнем пункте говорится:
Или создайте шаблон документа с другим формат файла, который можно экспортировать в DocX и формат файла PDF. Кроме того, конечные пользователи должны легко редактировать это файл. Если вы знаете, скажите, пожалуйста.
Я прочитал это в том смысле, что вы хотите иметь возможность создать шаблон документа, заполнить его данными и преобразовать в PDF, но разрешить сохранение шаблона, верно?
Решение: XSL-FO
XSL-FO - это стандарт W3C, такой как HTML, и его можно преобразовать с помощью ряда коммерческих продуктов и продуктов с открытым исходным кодом в PDF, WordML, XPS, PS, PCL, SVG, TIFF и т. Д. Я использовал это для доставки сотен тысяч документов в месяц, как онлайн в формате PDF, так и офлайн (например, массовая печать чеков).
Для начала вот страница W3C для XML-FO . Там много полезной информации, включая список программного обеспечения (как с открытым исходным кодом, так и коммерческое) внизу слева. Я лично использовал два коммерческих продукта под названием IBEX PDF Creator и XEP от RenderX . Оба являются превосходными продуктами, и существует полностью управляемая реализация C # для доступа к PDF под названием FO.NET на CodePlex. Я не пробовал этого, но он должен удовлетворять вашему критерию «бесплатности».
Существует несколько способов редактирования шаблона для документов, которые будут созданы в XSL-FO. Обычно этот шаблон представляет собой XSLT, который вы применяете к своим XML-данным, но это не является обязательным требованием. Я собрал их вручную, но это требует некоторого обучения. Вы можете начать с документа в XSL-FO и заполнить его разделы кодом, как если бы вы делали HTML. Хорошей новостью является то, что существует ряд редакторов XSL-FO . Плохая новость заключается в том, что все, о чем я знаю, не бесплатны, но некоторые из них дешевы, и вы можете найти что-то, отвечающее критериям бесплатности, немного погуглите. Однако,
Есть ли в Open Office API? это хотя бы бесплатный вариант?
Создайте PDF-файл с помощью инструмента создания отчетов, такого как ActiveReports / Crystal Reports (намного проще, чем использование iTextSharp)
Установка Office 2007 и использование библиотеки объектов Word 12 - это определенно вариант, который я бы выбрал (и сделал это в некоторых из мои собственные проекты).
Если вы не хотите устанавливать Word на рабочий веб-сервер, почему бы не установить его на вторичный сервер. Вы можете заставить этот второй сервер взаимодействовать с первым (используя веб-службу или что-то в этом роде) - он может запросить следующий документ Word, который нужно экспортировать, выполнить преобразование и затем вернуть данные PDF.
Дайте мне знать. если вам нужен C # пример автоматизации Word, который выполняет это преобразование (это очень тривиально).
Адриан
Вот мой код, отправлено для Джейсона. Это работает с Word 2007. Вам необходимо загрузить и установить средство экспорта PDF с веб-сайта Office:
using Microsoft.Office.Interop.Word;
...
object _read_only = false;
object _visible = true;
object _false = false;
object _true = true;
object _dynamic = 2;
object _missing = System.Reflection.Missing.Value;
object _htmlFormat = 8;
object _pdfFormat = 17;
object _xpsFormat = 18;
object fileName = "C:\\Test.docx";
ApplicationClass ac = new ApplicationClass();
//ac.Visible = true; // Uncomment to see Word as it opens and converts the document
//ac.Activate();
Document d = ac.Documents.Open(ref fileName, ref _missing, ref _true, ref _read_only, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _visible, ref _missing, ref _missing, ref _missing, ref _missing);
object newFileName = ((string)fileName).Substring(0, ((string)fileName).LastIndexOf(".")) + ".pdf";
d.SaveAs(ref newFileName, ref _pdfFormat, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing, ref _missing);
d.Close(ref _false, ref _missing, ref _missing);
ac.Quit(ref _false, ref _missing, ref _missing);
ac = null;
Итак, Soul_Master, вы говорите, что не хотите использовать взаимодействие (хотя вы не говорите, почему , о чем мне было бы интересно узнать), вы не хотите платить за коммерческого экспортера и хотите идеальных результатов?
Боюсь, я не могу вам помочь. Interop всегда будет давать идеальные результаты, и у вас уже есть программное обеспечение. Если вы не воспользуетесь этим, вам придется пожертвовать ценой или качеством.
Вы не хотите платить за коммерческого экспортера и хотите отличных результатов?Боюсь, я не могу вам помочь. Interop всегда будет давать идеальные результаты, и у вас уже есть программное обеспечение. Если вы не воспользуетесь этим, вам придется пожертвовать ценой или качеством.
Вы не хотите платить за коммерческого экспортера и хотите отличных результатов?Боюсь, я не могу вам помочь. Interop всегда будет давать идеальные результаты, и у вас уже есть программное обеспечение. Если вы не воспользуетесь этим, вам придется пожертвовать ценой или качеством.