我的情况是,我们可能有200份报告由SSRS生成并导出为PDF。然后将这100份报告合并为一份大型PDF进行分发(在任何人推荐之前,一般过程不会改变......在可预见的将来,我们将继续收到多个单独的PDF文件。)
合并PDF的大小非常大(我正在使用iTextSharp和PdfSmartCopy来合并那些感兴趣的人)。代码如下,以防有人可以改进。
private void MergePDF()
{
using (MemoryStream stream = new MemoryStream())
{
Document doc = new Document();
PdfSmartCopy pdf = new PdfSmartCopy(doc, stream);
doc.Open();
files.OrderBy(o => o.GetOrder()).ToList().ForEach(file =>
{
pdf.AddDocument(new PdfReader(file.AcquireFile()));
});
mergedStream = new MemoryStream(stream.GetBuffer());
if (doc != null) doc.Close();
}
mergedFile = new EMMAFilePDF();
mergedFile.SetStream(mergedStream);
}
我已将问题缩小到字体子集。 It appears SSRS will embed a font subset for each report。而iTextSharp,有理由,cannot merge embedded font subsets。
使用Acrobat Pro我可以清理其中的一部分并减小文件大小,但我试图完全自动化该过程,这个字体子集问题似乎是最后一块。
这让我想到了核心问题:是否有人知道强制SSRS嵌入完整字体而不是字体子集的方法?如果是这样,那么iTextSharp可以在合并时删除完整字体,从而产生更小的最终PDF大小。
或者,是否有可以正确合并字体子集的工具(非免费)?