テキストとグラフィックスの出力を PDF ドキュメントにレンダリングできるライブラリを探しています。(カイロは確かにオプションです。) 同じライブラリを使用できるかどうかを確認するために、OpenOffice がどのように PDF ファイルを書き込むかを知りたいです。OpenOffice で PDF エクスポートに使用されているライブラリは何ですか?
編集: C または C++ ライブラリを探しています。
テキストとグラフィックスの出力を PDF ドキュメントにレンダリングできるライブラリを探しています。(カイロは確かにオプションです。) 同じライブラリを使用できるかどうかを確認するために、OpenOffice がどのように PDF ファイルを書き込むかを知りたいです。OpenOffice で PDF エクスポートに使用されているライブラリは何ですか?
編集: C または C++ ライブラリを探しています。
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を返します。
}
}
}
PDFCreator には、役立つ API があります。
http://www.pdfforge.org/forum/open-discussion/3063-api-sdk-pdf作成者
どの言語で作業していますか? そこには多くのPDFライブラリがあります。Stack Overflow で「pdf ライブラリ [プログラミング言語]」を検索します。すでにたくさんの推奨事項があります。
OpenOffice はSun PDF ライブラリを拡張機能として使用して PDF をインポートしますが、エクスポートに何を使用するかはわかりません。