私は2つのPDFを一緒に結合しました。両方とも100kbですが、それらをまとめると500kbを超えました。 PDFのサイズを圧縮するにはどうすればよいですか?CでPDFを圧縮する
public static string PDFFromLabelData(LabelData label)
{
string base64String = "";
try
{
using (var ms = new MemoryStream())
{
iTextSharp.text.Document document = new iTextSharp.text.Document();
iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, ms);
if (label.base64PDFString.Length > 0)
{
document.Open();
iTextSharp.text.pdf.PdfContentByte cb = writer.DirectContent;
iTextSharp.text.pdf.PdfImportedPage page;
iTextSharp.text.pdf.PdfReader reader;
byte[] byteArray = Convert.FromBase64String(label.base64PDFString);
try
{
reader = new iTextSharp.text.pdf.PdfReader(byteArray);
}
catch (Exception ex)
{
throw ex;
}
int pages = reader.NumberOfPages;
// loop over document pages
document.SetPageSize(iTextSharp.text.PageSize.A4);
document.NewPage();
page = writer.GetImportedPage(reader, 1);
cb.AddTemplate(page, 0, 0);
}
foreach (Bitmap bmp in label.LabelImages)
{
iTextSharp.text.Rectangle pageSize = null;
pageSize = new iTextSharp.text.Rectangle(0, 0, (bmp.Width/bmp.VerticalResolution) * 71, (bmp.Height/bmp.VerticalResolution) * 71);
document.SetPageSize(pageSize);
document.SetMargins(2, 2, 4, 4);
document.NewPage();
if (!document.IsOpen())
{
document.Open();
}
using (var mm = new MemoryStream())
{
bmp.Save(mm, System.Drawing.Imaging.ImageFormat.Jpeg);
iTextSharp.text.Jpeg jpg = new iTextSharp.text.Jpeg(mm.ToArray());
jpg.ScaleToFit(pageSize);
document.Add(jpg);
}
}
document.Close();
base64String = Convert.ToBase64String(ms.ToArray());
}
}
catch (Exception e)
{
throw e;
}
return base64String;
}
Idはクラス内の圧縮特性があると仮定します。あなたはそれを見て見なければなりません。 – CathalMF
あなたが投稿したコードは、まったく新しい空のドキュメントを作成し、別のPDFから最初のページをインポートした後、たくさんのイメージをインポートするためのものです。しかし、これはあなたの問題の記述と実際には一致しません。 –
@CathalMFによれば、 'writer.SetFullCompression()'と 'writer.CompressionLevel = PdfStream.BEST_COMPRESSION'を使って圧縮を試み、改善することができます。そして、@Chrisが言っているように、あなたのコードはあなたの質問とは無関係のようです。 – mkl