Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.03;
Скачать: CL | DM;

Вниз

преобразовать 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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.02 c
2-1214549615
matriza
2008-06-27 10:53
2008.08.03
преобразовать doc и xls в pdf


2-1215154573
lead-in
2008-07-04 10:56
2008.08.03
допустимое имя файла


15-1213879771
User_1
2008-06-19 16:49
2008.08.03
El-Lib


15-1213304967
Loginov Dmitry
2008-06-13 01:09
2008.08.03
SafeIniFiles


2-1214939769
maxon
2008-07-01 23:16
2008.08.03
Как создать и работать с двухмерным динамическим масивом?