2

テキストとグラフィックスの出力を PDF ドキュメントにレンダリングできるライブラリを探しています。(カイロは確かにオプションです。) 同じライブラリを使用できるかどうかを確認するために、OpenOffice がどのように PDF ファイルを書き込むかを知りたいです。OpenOffice で PDF エクスポートに使用されているライブラリは何ですか?

編集: C または C++ ライブラリを探しています。

4

3 に答える 3

7

OpenOfficeを使用してドキュメントをPDFにエクスポートする方法を見つけるためにどこでも調べました。私はついにOpenOfficeフォーラムに埋もれた投稿を見つけ、90%そこにたどり着きました。これが私の100%ソリューションです。OpenOffice3.1で動作します。このコードを使用するには、OpenOfficeをインストールする必要があります。cli_basetypes、cli_cppuhelper、cli_oootypes、cli_ure、cli_uretypesへの参照を含める必要があります。これらのdll参照は、OpenOfficeSDKにあります。申し訳ありませんが、これはC#です。C/C++ではありません。HTH誰か。

unoidl.com.sun.star.langを使用します。
unoidl.com.sun.star.unoを使用する;
unoidl.com.sun.star.bridgeを使用します。
unoidl.com.sun.star.frameを使用します。
unoidl.com.sun.star.beansを使用します。

public static void ConvertToPDF(string inputFile、string outputFile)
        {{
            if(ConvertExtensionToFilterType(Path.GetExtension(inputFile))== null)
                新しいInvalidProgramException("OpenOfficeの不明なファイルタイプ。File="+ inputFile);をスローします。

            StartOpenOffice();

            //ComponentContextを取得します
            unoidl.com.sun.star.uno.XComponentContext xLocalContext =
               uno.util.Bootstrap.bootstrap();
            //MultiServiceFactoryを取得します
            unoidl.com.sun.star.lang.XMultiServiceFactory xRemoteFactory =
               (unoidl.com.sun.star.lang.XMultiServiceFactory)
               xLocalContext.getServiceManager();
            //CompontLoaderを取得します
            XComponentLoader aLoader =
               (XComponentLoader)xRemoteFactory.createInstance( "com.sun.star.frame.Desktop");
            //ソースファイルをロードします

            XComponent xComponent = null;
            試す
            {{
                xComponent = initDocument(aLoader、
                   PathConverter(inputFile)、 "_blank");
                //読み込みを待ちます
                while(xComponent == null)
                {{
                    System.Threading.Thread.Sleep(1000);
                }

                //ドキュメントを保存/エクスポートします
                saveDocument(xComponent、inputFile、PathConverter(outputFile));

            }
            キャッチ{スロー; }
            最後に{xComponent.dispose(); }

        }

        private static void StartOpenOffice()
        {{
            Process [] ps = Process.GetProcessesByName( "soffice.exe");
            if(ps!= null)
            {{
                if(ps.Length> 0)
                    戻る;
                そうしないと
                {{
                    プロセスp=new Process();
                    p.StartInfo.Arguments = "-headless -nofirststartwizard";
                    p.StartInfo.FileName = "soffice.exe";
                    p.StartInfo.CreateNoWindow = true;
                    bool result = p.Start();
                    if(result == false)
                        新しいInvalidProgramException( "OpenOfficeを起動できませんでした。");をスローします。
                }
            }
            そうしないと
            {{
                新しいInvalidProgramException( "OpenOfficeが見つかりません。OpenOfficeはインストールされていますか?");をスローします。
            }
        }

        private static XComponent initDocument(XComponentLoader aLoader、string file、string target)
        {{
            PropertyValue [] openProps = new PropertyValue [1];
            openProps [0] = new PropertyValue();
            openProps [0] .Name="非表示";
            openProps [0] .Value = new uno.Any(true);


            XComponent xComponent = aLoader.loadComponentFromURL(
               ファイル、ターゲット、0、
               openProps);

            xComponentを返します。
        }


        private static void saveDocument(XComponent xComponent、string sourceFile、string destinationFile)
        {{
            PropertyValue [] propertyValues = new PropertyValue [2];
            propertyValues = new PropertyValue [2];
            //上書きのフラグを設定します
            propertyValues [1] = new PropertyValue();
            propertyValues [1] .Name="上書き";
            propertyValues [1] .Value = new uno.Any(true);
            ////フィルター名の設定
            propertyValues [0] = new PropertyValue();
            propertyValues [0] .Name = "FilterName";
            propertyValues [0] .Value = new uno.Any(ConvertExtensionToFilterType(Path.GetExtension(sourceFile)));
            ((XStorable)xComponent).storeToURL(destinationFile、propertyValues);

        }


        プライベート静的文字列PathConverter(文字列ファイル)
        {{
            if(file == null || file.Length == 0)
                新しいNullReferenceException( "OpenOfficeに渡されたNullまたは空のパス");をスローします。

            String.Format( "file:/// {0}"、file.Replace(@ "\"、 "/"));を返します。

        }

        public static string ConvertExtensionToFilterType(string extension)
        {{
            スイッチ(延長)
            {{
                ケース".doc":
                ケース".docx":
                ケース".txt":
                ケース".rtf":
                ケース".html":
                ケース".htm":
                ケース".xml":
                ケース「.odt」:
                ケース".wps":
                ケース".wpd":
                    "writer_pdf_Export"を返します;
                ケース".xls":
                ケース".xlsb":
                ケース「.ods」:
                    「calc_pdf_Export」を返します。
                ケース".ppt":
                ケース".pptx":
                ケース".odp":
                    "impress_pdf_Export"を返します;

                デフォルト:nullを返します。
            }
        }


    }
于 2010-01-18T20:44:38.423 に答える
1

PDFCreator には、役立つ API があります。

http://www.pdfforge.org/forum/open-discussion/3063-api-sdk-pdf作成者

于 2010-11-19T20:57:25.130 に答える
1

どの言語で作業していますか? そこには多くのPDFライブラリがあります。Stack Overflow で「pdf ライブラリ [プログラミング言語]」を検索します。すでにたくさんの推奨事項があります。

OpenOffice はSun PDF ライブラリを拡張機能として使用して PDF をインポートしますが、エクスポートに何を使用するかはわかりません。

于 2009-12-08T18:43:22.953 に答える