欧进忠 發表於 2022-8-27 11:21:00

delphi TMS FlexCel 导出PDF

<h1 id="tms-flexcel-导出pdf">TMS FlexCel 导出PDF</h1>
<h2 id="属性和方法">属性和方法</h2>
<h3 id="tflexcelpdfexport">TFlexCelPdfExport</h3>
<p>用于将Excel文件导出为PDF的组件。</p>
<p><strong>unit</strong></p>
<p>FlexCel.Render</p>
<h3 id="tflexcelpdfexportcreate">TFlexCelPdfExport.Create</h3>
<pre><code class="language-delphi">constructor Create(const aWorkbook: TExcelFile);
constructor Create(const aWorkbook: TExcelFile; const aAllowOverwritingFiles: Boolean);
</code></pre>
<p>创建一个新的 <code>TFlexCelPdfExport</code> 并将其分配给Excel文件。</p>
<p><strong>重载</strong></p>
<p><code>Create(TExcelFile, Boolean)</code></p>
<p>创建一个新的 <code>TFlexCelPdfExport</code> 并将其分配给Excel文件,将<code>AllowOverwritingFiles</code>设置为所需的值。</p>
<p><strong>参数</strong></p>
<p><em>aWorkbook</em>包含此组件将导出的数据的Excel文件。</p>
<p><em>aAllowOverwritingFiles</em>当为<em>true</em>时,现有文件将被覆盖。</p>
<h3 id="tflexcelpdfexportexport">TFlexCelPdfExport.Export</h3>
<pre><code class="language-delphi">procedure Export(const pdfStream: TStream);
procedure Export(const fileName: string);
</code></pre>
<p><strong>重载</strong></p>
<p><code>Export(TStream)</code></p>
<p>将相关Excel工作簿的活动工作表导出到流。</p>
<p><code>Export(string)</code></p>
<p>将相关Excel工作簿的活动工作表导出到文件。</p>
<p><strong>参数</strong></p>
<p><em>pdfStream</em>将写入结果的流。</p>
<p><em>fileName</em>要导出的文件。</p>
<blockquote>
<p>此方法是调用 <code>BeginExport</code>/<code>ExportSheet</code>/<code>EndExport</code> 的快捷方式。</p>
</blockquote>
<h3 id="tflexcelpdfexportbeginexport">TFlexCelPdfExport.BeginExport</h3>
<pre><code class="language-delphi">procedure BeginExport(const pdfStream: TStream);
</code></pre>
<p>初始化PDF导出为新文件。</p>
<blockquote>
<p>调用此方法后,您可以调用 <code>ExportSheet</code> 或 <code>ExportAllVisibleSheets(Boolean, string)</code> 将不同的Excel文件导出为同一个PDF。</p>
<p>您应该始终通过调用 <code>EndExport</code> 来结束文档。</p>
</blockquote>
<p><strong>参数</strong></p>
<p><em>pdfStream</em>将包含新PDF文件的流。</p>
<h3 id="tflexcelpdfexportexportsheet">TFlexCelPdfExport.ExportSheet</h3>
<pre><code class="language-delphi">procedure ExportSheet;
procedure ExportSheet(const startPageToDisplay: Integer; const totalPagesToDisplay: Integer);
procedure ExportSheet(const startPageToDisplay: Integer; totalPagesToDisplay: Integer; const startPageToExport: Integer; const totalPagesToExport: Integer);
</code></pre>
<p>导出当前Excel工作簿的活动工作表。您可以定义要打印的第一页和全局页数,以便Excel文件的页眉和页脚上的页码与PDF上的实际页数相对应。</p>
<p><strong>参数</strong></p>
<p><em>startPageToDisplay</em>Excel文件的页眉和页脚将显示的第一页。 如果您只导出一个表格到PDF文件,这个值可以是1。如果要将多个工作表导出到同一个PDF文件,则需要将<em>startPageToDisplay</em>设置为PDF上的实际页面。</p>
<p><em>totalPagesToDisplay</em>在Excel页眉和页脚上显示的总页数。 如果您只将一个表格导出到PDF文件,将其设置为 -1,它将自动计算。 如果没有,请在这里提供文件的总页数,以便 FlexCel 可以显示诸如“page 1 of 50”之类的页脚。</p>
<p><em>startPageToExport</em>要导出的文件的第一页(第一页为 1)。<strong>默认值</strong> <em>1</em>。</p>
<p><em>totalPagesToExport</em>将导出多少页。 如果在此处指定负数,则将导出 <em>startPageToExport</em> 中的所有页面。<strong>默认值</strong> <em>-1</em>。</p>
<blockquote>
<p><em>startPageToDisplay</em> 是 Excel页眉和页脚中的 <code>&amp;[页码]</code></p>
<p><em>totalPagesToDisplay</em> 是 Excel页眉和页脚中的 <code>&amp;[总页数]</code></p>
<p><em>startPageToDisplay</em>是相对于<em>startPageToPrint</em>的页码,表示导出的第1页的 <code>&amp;[页码]</code>从<em>startPageToPrint</em>开始</p>
<ul>
<li><code>startPageToPrint = 10, startPageToDisplay = 1</code>,表示导出的第1页的页眉和页脚页码从10开始</li>
<li><code>startPageToPrint = 10, startPageToDisplay = 2</code>,表示导出的第1页的页眉和页脚页码从11开始</li>
<li><code>startPageToPrint = 10, startPageToDisplay = -9</code>,表示导出的第1页的页眉和页脚页码从1开始</li>
</ul>
<p><em>totalPagesToDisplay</em>与<em>totalPagesToPrint</em>值为-1时与<code>TotalPagesInSheet</code>相等</p>
</blockquote>
<h3 id="tflexcelpdfexportendexport">TFlexCelPdfExport.EndExport</h3>
<pre><code class="language-delphi">procedure EndExport;
</code></pre>
<p>将预告片信息写入PDF文件。始终在调用 <code>BeginExport</code> 后调用此方法。</p>
<h3 id="tflexcelpdfexporttotalpagesinsheet">TFlexCelPdfExport.TotalPagesInSheet</h3>
<pre><code class="language-delphi">function TotalPagesInSheet: Integer;
</code></pre>
<p>返回活动工作表导出为PDF时将使用的页数。</p>
<blockquote>
<p>只有调用<code>BeginExport</code>后才能调用<code>TotalPagesInSheet</code> 。</p>
</blockquote>
<h3 id="tflexcelpdfexportexportallvisiblesheets">TFlexCelPdfExport.ExportAllVisibleSheets</h3>
<pre><code class="language-delphi">procedure ExportAllVisibleSheets(const resetPageNumberOnEachSheet: Boolean; const bookmarkName: string);
procedure ExportAllVisibleSheets(const fileName: string; const resetPageNumberOnEachSheet: Boolean; const bookmarkName: string);
</code></pre>
<p>将Excel文件中的所有可见工作表导出为PDF。</p>
<blockquote>
<p>与为每个工作表调用 ExportSheet 不同,此方法可以保持每个工作表上的页码增长,而无需重新设置。</p>
<p><code>ExportAllVisibleSheets(string, Boolean, string)</code>此方法是创建文件流的快捷方式,在文件流上先调用 <code>BeginExport</code>,再调用 <code>ExportAllVisibleSheets(Boolean, string)</code>,然后调用 <code>EndExport</code>。</p>
</blockquote>
<p><strong>参数</strong></p>
<p><em>fileName</em>要导出的文件。</p>
<p><em>resetPageNumberOnEachSheet</em>如果为<em>true</em>,则每个新工作表都将重置Excel页眉和页脚上显示的页码。</p>
<p><em>bookmarkName</em>如果不为空,则每个工作表都将作为一个条目添加到PDF文件中的书签上,并使用此处指定的名称。</p>
<blockquote>
<p>如果希望打开pdf文件时书签窗口可见,请设置 <code>TPdfWriter.PageLayout = TPageLayout</code>。</p>
<p>使用 <code>GetBookmarkInformation</code> 事件进一步自定义每个条目中的内容 。</p>
</blockquote>
<h2 id="例子">例子</h2>
<h3 id="简单导出到pdf">简单导出到PDF</h3>
<pre><code class="language-delphi">uses VCL.FlexCel.Core, FlexCel.XlsAdapter, FlexCel.Render;

procedure TForm1.Button15Click(Sender: TObject);
var
Xls: TXlsFile;
Pdf: TFlexCelPdfExport;
begin
//读取Excel文件
Xls := TXlsFile.Create('C:\Users\Administrator\Desktop\ceshi.xlsx');
//关联导出的文档
Pdf := TFlexCelPdfExport.Create(Xls, True);
try
    //设置要导出的工作表
    Xls.ActiveSheetByName := 'Sheet2';
    //导出当前活动的工作表到文件
    Pdf.Export('C:\Users\Administrator\Desktop\ceshi.pdf');
finally
    Pdf.Free;
    Xls.Free;
end;
end;
</code></pre>
<h3 id="复杂导出到pdf">复杂导出到PDF</h3>
<pre><code class="language-delphi">uses VCL.FlexCel.Core, FlexCel.XlsAdapter, FlexCel.Render;

procedure TForm1.Button16Click(Sender: TObject);
var
Xls: TXlsFile;
Pdf: TFlexCelPdfExport;
Stream: TMemoryStream;
begin
//读取Excel文件(excel中页眉或页脚设置“&amp;[页码]”“&amp;[总页数]”时显示页数)
Xls := TXlsFile.Create('C:\Users\Administrator\Desktop\ceshi.xlsx');
//关联导出文档
Pdf := TFlexCelPdfExport.Create(Xls);
Stream := TMemoryStream.Create;
try
    Pdf.BeginExport(Stream);
    try
      //ExportSheet函数
      //参数startPageToDisplay是相对于startPageToPrint的页码,从1开始
      //startPageToPrint = 6,startPageToDisplay = 1,表示第1页的页码从6开始
      //参数totalPagesToDisplay与totalPagesToPrint值为-1时与TotalPagesInSheet相等
      //导出第1个工作表的6-10页(页眉显示第6页,共10页)
      Xls.ActiveSheet := 1;
      Pdf.ExportSheet(1, 10, 6, 5);
      //导出第2个工作表的6-10页(页眉显示第1页,共5页)
      Xls.ActiveSheet := 2;
      Pdf.ExportSheet(-4, 5, 6, 5);
      //导出第3个工作表10页后的(页眉显示第11页,共页)
      Xls.ActiveSheet := 3;
      Pdf.ExportSheet(1, Pdf.TotalPagesInSheet, 11, -1);
    finally
      Pdf.EndExport;
    end;
    Stream.SaveToFile('C:\Users\Administrator\Desktop\ceshi.pdf');
finally
    Pdf.Free;
    Xls.Free;
    Stream.Free;
end;
end;
</code></pre>
<h3 id="可见工作表导出到pdf">可见工作表导出到PDF</h3>
<pre><code class="language-delphi">uses VCL.FlexCel.Core, FlexCel.XlsAdapter, FlexCel.Render;

procedure TForm1.Button17Click(Sender: TObject);
var
Xls: TXlsFile;
Pdf: TFlexCelPdfExport;
Stream: TMemoryStream;
begin
//读取Excel文件
Xls := TXlsFile.Create('C:\Users\Administrator\Desktop\ceshi.xlsx');
//关联导出的文档
Pdf := TFlexCelPdfExport.Create(Xls, True);
Stream := TMemoryStream.Create;
try
    //导出所有可见工作表到文件
    Pdf.ExportAllVisibleSheets('C:\Users\Administrator\Desktop\ceshi1.pdf', True, '');
    //导出所有可见工作表到流
    Pdf.BeginExport(Stream);
    Pdf.ExportAllVisibleSheets(True, '');
    Pdf.EndExport;
    //将流数据保存到文件
    Stream.SaveToFile('C:\Users\Administrator\Desktop\ceshi2.pdf');
finally
    Pdf.Free;
    Xls.Free;
    Stream.Free;
end;
end;
</code></pre><br><br>
来源:https://www.cnblogs.com/txgh/p/16630188.html
頁: [1]
查看完整版本: delphi TMS FlexCel 导出PDF