gpt4 book ai didi

delphi - 将 OpenOffice Calc 文件导出为 PDF 时如何尊重打印区域?

转载 作者:行者123 更新时间:2023-12-03 15:55:05 24 4
gpt4 key购买 nike

Here有一个将 OpenOffice 文件保存为 PDF 的示例。我正在使用类似的代码将 Calc 文件保存为 PDF。 (将属性 writer_pdf_Export 更改为 calc_pdf_Export 就足够了。)

不幸的是,代码没有考虑原始文件中定义的打印区域。

我怎样才能做到这一点?

最佳答案

扩展我以前的代码(它并不那么干净)我会尝试这样的事情(注意我还没有测试它)。第三个参数指定导出范围为TRect变量:

procedure ExportCalcRangeToPDF(const ASourceFileURL, ATargetFileURL: string;
ASheetIndex: Integer; ARange: TRect);
var
CellRange: Variant;
StarOffice: Variant;
StarDesktop: Variant;
StarDocument: Variant;
FilterParams: Variant;
ExportParams: Variant;
ExportObject: Variant;

function CreateProperty(const AName: AnsiString; const AValue: Variant): Variant;
begin
Result := StarOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
Result.Name := AName;
Result.Value := AValue;
end;

begin
StarOffice := CreateOleObject('com.sun.star.ServiceManager');
StarDesktop := StarOffice.CreateInstance('com.sun.star.frame.Desktop');

FilterParams := VarArrayCreate([0, 0], varVariant);
FilterParams[0] := CreateProperty('Hidden', True);

StarDocument := StarDesktop.LoadComponentFromURL(ASourceFileURL, '_blank', 0,
FilterParams);
CellRange := StarDocument.Sheets.getByIndex(ASheetIndex).getCellRangeByPosition(
ARange.Left, ARange.Top, ARange.Right, ARange.Bottom);

ExportParams := VarArrayCreate([0, 0], varVariant);
ExportParams[0] := CreateProperty('Selection', CellRange);

ExportObject := StarOffice.Bridge_GetValueObject;
ExportObject.Set('[]com.sun.star.beans.PropertyValue', ExportParams);

FilterParams := VarArrayCreate([0, 1], varVariant);
FilterParams[0] := CreateProperty('FilterName', AnsiString('calc_pdf_Export'));
FilterParams[1] := CreateProperty('FilterData', ExportObject);

StarDocument.StoreToURL(ATargetFileURL, FilterParams);

StarDocument.Close(True);
StarDesktop.Terminate;

StarDocument := Unassigned;
StarDesktop := Unassigned;
StarOffice := Unassigned;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ExportCalcRangeToPDF(
'file:///C:/SourceFile.ods',
'file:///C:/TargetFile.pdf',
0,
Rect(1, 1, 2, 2)
);
end;

关于delphi - 将 OpenOffice Calc 文件导出为 PDF 时如何尊重打印区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10686569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com