Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
4-1193867321
Zuzlan
2007-11-01 00:48
2008.08.03
Альтернатива sleep


15-1213558693
Pavia
2008-06-15 23:38
2008.08.03
Современные компьютерные технологии


2-1215146523
Владимир
2008-07-04 08:42
2008.08.03
Работа с холстом формы


2-1215184038
fog
2008-07-04 19:07
2008.08.03
ADO. Присвоение результата Execute


15-1213783704
ciborg
2008-06-18 14:08
2008.08.03
Как работают мьютексы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский