Форум: "Начинающим";
Текущий архив: 2008.08.03;
Скачать: [xml.tar.bz2];
Внизпреобразовать doc и xls в pdf Найти похожие ветки
← →
matriza (2008-06-27 10:53) [0]приветствую всех =)
знаю что произвести конвертацию из doc и xls в pdf можно как минимум тремя способами
1) использовать printout на виртуальный принтер создающий pdf
2) с использованием компонент FastReport
3) с использованием библиотеки adobepdfmakerx.dll
первый способ вполне не сложный и я знаю как реализовать... но не совсем удобно устанавливать дополнительное по для создания пдф к тому же принтер сам по себе работает немного тормознуто
а вот два остальных способа поинтереснее но как их реализовать я не знаю... особенно интересно как сделать с помощью FastReport
← →
Anatoly Podgoretsky © (2008-06-27 11:08) [1]> matriza (27.06.2008 10:53:00) [0]
Ты не рассмотрел самый прямой способ, Save As в офисе.
← →
clickmaker © (2008-06-27 11:14) [2]> Save As в офисе.
в PDF?
← →
matriza (2008-06-27 11:16) [3]worddocument1.saveas(filename, fileformat)
где переменная fileformat типа olevariant может принимать значения:
Шестнадцатеричная Символьное обозначение Смысл
$00000000 wdformatdocument Документ word
$00000004 wdformatdostext Простой текст
$00000006 wdformatrtf Файл rtf
----------------------------------------------------------
вроде бы SaveAs не умеет сохранять pdf или я сильно заблуждаюсь???
← →
Palladin © (2008-06-27 11:20) [4]у Анатоля умеет :)
← →
matriza (2008-06-27 11:24) [5]сижу уже третьи день и ночь над этой конвертацией... как то не охота смеяться =) но вот если бы оказалось все так просто и можно было SaveAs юзать то у меня бы истерика была бы уже =)
даже пусть SaveAs pdf делать не умеет... умел бы тифы джепеги делать уже было бы круто...
← →
Anatoly Podgoretsky © (2008-06-27 11:32) [6]Сразу не умеет, надо скачивать SaveAsPdfXps.msi с сайта микрософта. И этого гораздо качественнее и удобнее любых виртуальных принтеров.
← →
Anatoly Podgoretsky © (2008-06-27 11:33) [7]Ошибся SaveAsPDFandXPS.exe
← →
matriza (2008-06-27 11:43) [8]классна =) счс буду искать SaveAsPdfXps... насколько я понял если будут сложности его найти можно поискать в офисе 2007
и кстати... огромное спасибо Anatoly Podgoretsky за перевод книги IndyInDepth
мне как раз счс нужно много информации по работе с почтой в инди причем не на примере MailClient от разработчиков... вообще столько всего есть на сайте... запрятали от поисковиков =)
только волей случая или неслучая можно найти...
← →
matriza (2008-06-27 11:44) [9]>И этого гораздо качественнее и удобнее любых виртуальных принтеров.
мне как раз нужно качество и главное... скорость создания
← →
Anatoly Podgoretsky © (2008-06-27 11:45) [10]> matriza (27.06.2008 11:43:08) [8]
На сайте Микрософт прекрасный поиск.
← →
Anatoly Podgoretsky © (2008-06-27 11:46) [11]> matriza (27.06.2008 11:44:09) [9]
Со скорость не знаю, я не успевают отпустить мышку, как документ готов. Правда машины нормальные.
← →
matriza (2008-06-27 12:01) [12]только теперь я не понимаю какие параметры нужно задать в SaveAs
SaveAs(filename, fileformat) - интересует какой параметр будет у fileformat
← →
Anatoly Podgoretsky © (2008-06-27 12:13) [13]> matriza (27.06.2008 12:01:12) [12]
Это в MSDN надо лезть, но вряд ли в Дельфи будет определение, Дельфи идет с гигантским отставанием.
← →
Palladin © (2008-06-27 12:14) [14]
> matriza (27.06.08 12:01) [12]
в самом экселе теперь можно сохранить в pdf?
← →
Anatoly Podgoretsky © (2008-06-27 12:19) [15]> Palladin (27.06.2008 12:14:14) [14]
И в Экселе и в Ворде, и во всех остальных продуктах из офиса, у которых есть Save As пункт в меню. Качество и скорость очень высокое.
← →
Palladin © (2008-06-27 12:23) [16]
> Anatoly Podgoretsky © (27.06.08 12:19) [15]
ну тогда в мсдн можно не лазить, записать макрос и проникнуться всей мудростью
← →
Anatoly Podgoretsky © (2008-06-27 12:30) [17]> Palladin (27.06.2008 12:23:16) [16]
Я думаю в макросе будет константа, а не цифра. Правильне попробовать импортировать tlb
← →
Palladin © (2008-06-27 12:33) [18]ну значение константы редактор показывать умеет... но tlb да... будет правильней...
← →
Anatoly Podgoretsky © (2008-06-27 12:37) [19]> Palladin (27.06.2008 12:33:18) [18]
Меня смущает, почему Борланд так запаздывает, Д2006 есть модуль только для OfficeXP (2002)
← →
Palladin © (2008-06-27 12:43) [20]а зачем... лично я вот не вижу смысла, ну будет раннее связывание, ну чуток по быстрее вызовы будут проходить... меня и позднего скорость устраивает...
← →
Anatoly Podgoretsky © (2008-06-27 12:55) [21]> Palladin (27.06.2008 12:43:20) [20]
Ты про OLE или COM говоришь?
← →
Palladin © (2008-06-27 12:59) [22]про OLE
← →
Anatoly Podgoretsky © (2008-06-27 13:09) [23]> Palladin (27.06.2008 12:59:22) [22]
Это был просто контрольный выстрел.
Я предпочитаю СОМ
← →
umbra © (2008-06-27 13:19) [24]
> SaveAsPDFandXPS.exe
Хорошая наверно штука, только вот к ней еще оффис 2007 нужен :))
← →
Anatoly Podgoretsky © (2008-06-27 14:58) [25]> umbra (27.06.2008 13:19:24) [24]
Ну нужен, и не только он хорош, и сам офис тоже.
← →
matriza (2008-06-27 17:11) [26]ну а все таки... как программно можно реализовать конвертацию???
ради данной задачи не проблема поставить офис2007 учитывая скорость и качество пдф.... просто не хватает опыта что нужно делать после импорта tlb???
← →
matriza (2008-06-27 17:15) [27]также интересно как можно реализовать конвертацию с помощью FastReport??? говорят что пдф он может делать глючно но все равно интересно и лишним не будет =)
← →
salexn (2008-06-27 17:19) [28]>matriza
Fast вряд ли тут помощник, т.к. он не сможет "поднять" excel\word файлы.
← →
matriza (2008-06-27 17:20) [29]также интересно как можно реализовать конвертацию с помощью FastReport??? говорят что пдф он может делать глючно но все равно интересно и лишним не будет =)
← →
matriza (2008-06-27 17:36) [30]>salexn (27.06.08 17:19) [28]
я почему то думал что можно заюзать фастовый обработчик OnGetValue(вроде бы как так называется в данную минуту с коммуникатора пишу посмотреть не могу точно)... думал как нибудь можжно подгрузить в него word и excel
← →
Ega23 © (2008-06-27 17:41) [31]OpenOffice умеет.
← →
salexn (2008-06-27 17:47) [32]>matriza
А что обрабатывать на OnGetValue? Какие данные "вживлять" в Fast? Я не представляю себе шаблон Fast и то, что он должен делать...
← →
matriza (2008-06-27 18:00) [33]>Ega23 © (27.06.08 17:41) [31]
а можно поподробнее???
>salexn (27.06.08 17:47) [32]
мне если честно также все меньше и меньше верится в это... в принципе из тех трех способов сработал только принтаут
с использованием библиотеки adobepdfmakerx.dll возможно тоже бы сработал но у меня не получилось импортировать данную библиотеку... хотя даже маленький примерчик нашел кода
← →
Ega23 © (2008-06-27 18:10) [34]
> а можно поподробнее???
OpenOffice + Google даст шикарные результаты.
← →
matriza (2008-06-27 18:25) [35]ясна =) спасибо огромное =) нашел на delphimaster пример =) через несколько часов буду у ноута испрбую...
← →
matriza (2008-06-29 11:58) [36]>Ega23 © (27.06.08 18:10) [34]
примеров конечно много нашел и узнал основы работы с OpenOffice
но так и не могу добраться до экспорта в pdf...
если вы не хотите рассказать как это сделать может все таки намекнете как это делать???
← →
matriza (2008-07-02 08:15) [37]все равно не могу разобраться с OpenOffice
вобщем есть такой модуль
{=============================================================================== =
Copyright (C) 1997-2003 Mills Enterprise
Unit : OpenOfficePDF
Purpose : This unit provides a single class to enabled the programmer to create a PDF
document through the OpenOffice.Org API. This unit is provided as freeware
please use at your own risk. This file can be found as a part of the rmControls
library
Date : 07-25-2005
Author : Ryan J. Mills
Version : 1.93
================================================================================ }
unit OpenOfficePDF;
interface
uses ComObj, Variants, sysutils;
type
TOOoWriter = class(TObject)
private
fOpenOffice : Variant;
fDocument : Variant;
fConnected : boolean;
fDocumentOpened : boolean;
fDesktop : Variant;
fHTMLSrc : boolean;
function MakePropertyValue(PropName:string; PropValue:variant):variant;
public
Constructor Create;
destructor Destroy; override;
function Connect : boolean;
procedure Disconnect;
function OpenDocument(Filename:string):boolean;
procedure SaveToPDF(FileName:string);
procedure CloseDocument;
end;
implementation
uses
ActiveX;
{ TOOoWriter }
procedure TOOoWriter.CloseDocument;
begin
if fDocumentOpened then
begin
fDocument.Close(false);
fDocumentOpened := false;
fDocument := Unassigned;
fDesktop.Terminate;
fDesktop := UnAssigned;
end;
end;
function TOOoWriter.Connect: boolean;
begin
if VarIsEmpty(fOpenOffice) then
fOpenOffice := CreateOleObject("com.sun.star.ServiceManager");
fConnected := not (VarIsEmpty(fOpenOffice) or VarIsNull(fOpenOffice));
Result := fConnected;
end;
constructor TOOoWriter.Create;
begin
inherited;
CoInitialize(nil);
end;
destructor TOOoWriter.Destroy;
begin
CoUninitialize;
inherited;
end;
procedure TOOoWriter.Disconnect;
begin
if fDocumentOpened then
CloseDocument;
fConnected := false;
fOpenOffice := Unassigned;
end;
function TOOoWriter.MakePropertyValue(PropName: string;
PropValue: variant): variant;
var
Struct: variant;
begin
Struct := fOpenOffice.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
Struct.Name := PropName;
Struct.Value := PropValue;
Result := Struct;
end;
function TOOoWriter.OpenDocument(Filename: string): boolean;
var
wProperties : Variant;
wViewSettings : Variant;
wController : Variant;
begin
if not fConnected then
abort;
fDesktop := fOpenOffice.createInstance("com.sun.star.frame.Desktop");
wProperties := VarArrayCreate([0, 0], varVariant);
//wProperties[0] := MakePropertyValue("Hidden", True);
wProperties[0] := MakePropertyValue("Hidden", "MS Word 97");
fDocument := fDesktop.loadComponentFromURL("file:///"+ StringReplace(FileName, "\", "/", [rfIgnoreCase, rfReplaceAll]) , "_blank", 0, wProperties);
fDocumentOpened := not (VarIsEmpty(fDocument) or VarIsNull(fDocument));
fHTMLSrc := pos(".htm", lowercase(extractfileext(Filename))) > 0;
if fDocumentOpened and fHTMLSrc then
begin
wController := fDocument.Getcurrentcontroller;
if not (VarIsEmpty(wController) or VarIsNull(wController)) then
begin
wViewSettings := wController.getviewsettings;
if not (VarIsEmpty(wViewSettings) or VarIsNull(wViewSettings)) then
wViewSettings.ShowOnlineLayout := false;
end;
wViewSettings := Unassigned;
wController := Unassigned;
end;
result := fDocumentOpened;
end;
procedure TOOoWriter.SaveToPDF(FileName: string);
var
wProperties: variant;
begin
if not (fConnected and fDocumentOpened) then
abort;
wProperties := VarArrayCreate([0, 3], varVariant);
if fHTMLSrc then
wProperties[0] := MakePropertyValue("FilterName", "writer_web_pdf_Export")
else
wProperties[0] := MakePropertyValue("FilterName", "writer_pdf_Export");
wProperties[1] := MakePropertyValue("CompressionMode", "1");
wProperties[2] := MakePropertyValue("Pages", "All");
wProperties[3] := MakePropertyValue("Overwrite", TRUE);
fDocument.StoreToURL("file:///"+ StringReplace(FileName, "\", "/", [rfIgnoreCase, rfReplaceAll]), wProperties);
end;
end.
и вот код который использует модуль
unit OOUnit6;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,ComObj,ActiveX;
type
TForm6 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
procedure MakePDF(InFileName, OutFileName:string);
{ Public declarations }
end;
var
Form6: TForm6;
implementation
uses StripStringUnit1, OpenOfficePDF;
{$R *.dfm}
procedure TForm6.Button1Click(Sender: TObject);
var
inFilename,OutFilename : string;
begin
inFilename := "E:\Programming\work\Sources\other\crazy_mailer\coding\pdf\db\OpenOffice\Test2.d oc";
OutFilename :="E:\Programming\work\Sources\other\crazy_mailer\coding\pdf\db\OpenOffice\test2 .pdf";
MakePDF(infilename,OutFilename);
end;
procedure TForm6.MakePDF(InFileName, OutFileName:string);
var
wWriter : TOOoWriter;
begin
try
wWriter := TOOoWriter.Create;
try
if wWriter.Connect then
try
if wWriter.OpenDocument(InFileName) then
try
wWriter.SaveToPDF(OutFileName);
finally
wWriter.CloseDocument;
end;
finally
wWriter.Disconnect;
end;
finally
wWriter.free;
end;
except
on e:exception do
begin
Showmessage(e.message);
end;
end;
end;
end.
на выходе получается пдф-файл... но при открытии в акробате он пишет что файл поврежден если открыть пдф-файл в Writer то файл открывается
но мне нужно чтобы он открывался в акробате без проблем
оч надеюсь на вашу помощь...
← →
Ega23 © (2008-07-02 09:58) [38]
> если вы не хотите рассказать как это сделать может все таки
> намекнете как это делать???
А я и не знаю. Задачи такой никогда не стояло, а "просто так" делать у меня тупо времени нет. Но наверняка как-то можно.
Просто в ОО действительно есть экспорт в pdf. Когда понадобилось excel-файл в pdf перегнать, то так и сделали: открыли в ОО, сохранили в pdf.
← →
Ega23 © (2008-07-02 10:01) [39]Вот тут посмотри, вроде народ по делу обсуждает
http://www.sql.ru/forum/actualthread.aspx?tid=405083
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.08.03;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.008 c