Hallo Tutorials User,
Ich habe mal wieder ein Problem...
Infos:
Ich nutze die ProgSprache C# in VB Express 2010, zu meinem Projekt habe ich die ItextSharp Library hinzugefügt.
Ich habe eine Funktion die PDF-Datei merged.
Code:
Problem:
Die Merge Funktion funktioniert genauso wie sie soll, es gibt nur ein Problem...
Die Datei die herauskommt wird sehr groß, größer als andere PDFs mit der gleichen Seitenanzahl.
Frage:
Weiß jemand wie man diese PDF wieder kleiner bekommt?
Wenn man sie mit Acrobat öffnet und speichern unter macht dann wird sie wesentlich kleiner (bis zu 70%).
Aber dieser Vorgang soll automatisiert ablaufen....
Noch besser wäre es natürlich, wenn die Dateien gar nicht erst so groß werden.
Schon mal Danke für das Interesse und die eventuelle Hilfe
mfG
CShark
Ich habe mal wieder ein Problem...
Infos:
Ich nutze die ProgSprache C# in VB Express 2010, zu meinem Projekt habe ich die ItextSharp Library hinzugefügt.
Ich habe eine Funktion die PDF-Datei merged.
Code:
Code:
private bool MergePDFs(string outputPath)
{
bool result = false;
int currentPdfPageCount = 0;
int currentPage = 0;
int rotation = 0;
string currentPdfFilename = null;
Document pdfOutputDoc = new Document();
PdfWriter writer = null;
PdfReader reader = null;
PdfContentByte cb = null;
PdfImportedPage page = null;
try
{
if (dgvPdfs.Rows.Count > 0)
{
currentPdfFilename = dgvPdfs[0, 0].Value.ToString();
reader = new PdfReader(currentPdfFilename);
pdfOutputDoc = new Document(reader.GetPageSizeWithRotation(1));
writer = PdfWriter.GetInstance(pdfOutputDoc,
new FileStream(outputPath, FileMode.Create));
pdfOutputDoc.Open();
cb = writer.DirectContent;
for (int rowIndex = 0; rowIndex < dgvPdfs.Rows.Count - 1; rowIndex++)
{
currentPdfFilename = dgvPdfs[0, rowIndex].Value.ToString();
FileInfo fiCurrentPdf = new FileInfo(currentPdfFilename);
if (fiCurrentPdf.Exists)
{
reader = new PdfReader(currentPdfFilename);
if (dgvPdfs[1, rowIndex] == null ||
Convert.ToInt32(dgvPdfs[1, rowIndex].Value) > reader.NumberOfPages)
currentPage = 0;
else
currentPage = Convert.ToInt32(dgvPdfs[1, rowIndex].Value) - 1;
if (dgvPdfs[2, rowIndex] == null ||
Convert.ToInt32(dgvPdfs[2, rowIndex].Value) > reader.NumberOfPages)
currentPdfPageCount = reader.NumberOfPages;
else
currentPdfPageCount = Convert.ToInt32(dgvPdfs[2, rowIndex].Value);
while (currentPage < currentPdfPageCount)
{
currentPage++;
pdfOutputDoc.SetPageSize(reader.GetPageSizeWithRotation(currentPage));
pdfOutputDoc.NewPage();
page = writer.GetImportedPage(reader, currentPage);
rotation = reader.GetPageRotation(currentPage);
if (rotation == 90)
cb.AddTemplate(page, 0, -1.0F, 1.0F, 0, 0,
reader.GetPageSizeWithRotation(currentPage).Height);
else if (rotation == 270)
cb.AddTemplate(page, 0, 1.0F, -1.0F, 0,
reader.GetPageSizeWithRotation(currentPage).Width + 60, -30);
else
cb.AddTemplate(page, 1.0F, 0, 0, 1.0F, 0, 0);
}
}
else if (!fiCurrentPdf.Exists)
MessageBox.Show("Die Datei\r\n" + currentPdfFilename + "\r\nexistiert nicht!");
}
pdfOutputDoc.Close();
MessageBox.Show("Merging abgeschlossen!");
}
}
catch
{
MessageBox.Show("Merging failed!");
}
return result;
}
Problem:
Die Merge Funktion funktioniert genauso wie sie soll, es gibt nur ein Problem...
Die Datei die herauskommt wird sehr groß, größer als andere PDFs mit der gleichen Seitenanzahl.
Frage:
Weiß jemand wie man diese PDF wieder kleiner bekommt?
Wenn man sie mit Acrobat öffnet und speichern unter macht dann wird sie wesentlich kleiner (bis zu 70%).
Aber dieser Vorgang soll automatisiert ablaufen....
Noch besser wäre es natürlich, wenn die Dateien gar nicht erst so groß werden.
Schon mal Danke für das Interesse und die eventuelle Hilfe

mfG
CShark