tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
3
ZUGRIFFE
986
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    CShark CShark ist offline Mitglied
    Registriert seit
    Aug 2011
    Beiträge
    20
    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:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    
    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
     

  2. #2
    CShark CShark ist offline Mitglied
    Registriert seit
    Aug 2011
    Beiträge
    20
    Also ich habe keine Möglichkeit gefunden die Dateien klein zu halten.
    Aber ich habe jetzt eine Möglichkeit gefunden die Dateien WESENTLICH zu verkleinern, falls jemand wissen will wie es geht, einfach Fragen.
     

  3. #3
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.504
    Und warum sagst du es nicht einfach von dir aus?
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  4. #4
    CShark CShark ist offline Mitglied
    Registriert seit
    Aug 2011
    Beiträge
    20
    Ich verkleinere die PDFs mit Hilfe des Programms ghostscript.
    Ich habe mich für ghostscript entschieden, da es Batchfähig ist und ich es somit automatisch anstarten kann und so der ganze Ablauf automatisch ist.
    Ich lasse einfach durch mein Programm, welches die PDFs erstellt die Batch anstarten und die PDF dann verkleinern.

    Ich habe leider keine Möglichkeit gefunden die PDFs von Anfang an klein zu halten.
     

Ähnliche Themen

  1. Originalfarben verringern
    Von Viviana im Forum Sonstige Grafik-Programme
    Antworten: 0
    Letzter Beitrag: 21.01.11, 15:09
  2. Farbauftrag verringern
    Von sight011 im Forum Desktop Publishing (DTP)
    Antworten: 1
    Letzter Beitrag: 05.04.10, 03:06
  3. Prozessgröße verringern
    Von Freaky_09 im Forum .NET Application und Service Design
    Antworten: 2
    Letzter Beitrag: 04.01.07, 14:31
  4. Abfragedauer verringern?
    Von chris4712 im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 17.03.06, 17:13
  5. BpS erhöhen / verringern
    Von pascalplus im Forum Flash Plattform
    Antworten: 4
    Letzter Beitrag: 12.04.05, 15:45