1. Artikel
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forum
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Paules-PC-Forum.de
  2. Forum
  3. Programmierung
  4. XProfan

Negativer Einzug beim Druck von PDFs

  • Martin_K
  • 18. Februar 2022 um 16:39
  • Martin_K
    Fortgeschrittener
    Reaktionen
    7
    Beiträge
    165
    • 18. Februar 2022 um 16:39
    • #1

    Ich habe ein unerwartetes Druckverhalten, wenn ich PDFs ausgebe: Drucke ich direkt auf einen der Drucker, kommt alles wunderbar so, wie ich es erwarte. Wähle ich den PDF-Writer von Microsoft als Drucker aus, dann ist die gesamte Seite etwa 7 bis 8 mm nach links gerückt. Ich habe jetzt mal interessehalber einen anderen PDF-Writer installiert - verhält sich analog wie der Microsoft-PDF-Writer - das gesamte Druckbild ist zu weit links.

    Gibts ne einfach Lösung oder muss ich programmseits einen zusätzlichen Punkt einbauen, um bei PDF-Ausgabe einen Einzug links zusätzlich zu berücksichtigen?

    ---
    Xprofan X4, Win7/32, Win10/64

  • H.Brill
    Dauergast
    Reaktionen
    457
    Beiträge
    1.161
    • 18. Februar 2022 um 17:13
    • #2

    Hast du deine Daten positioniert ?

    Also sind da Leerzeichen vorne dran ?

    Der Drucker berücksichtigt das. Da scheinen die PDF-Writer vorne

    dran abzuschneiden, wenn da keine sichtbaren Zeichen stehen.

    Wenn dem so ist, würde ich mal folgendes probieren :

    Anstatt dem Blank (Leertaste) nimm das ALT + 255 (auf dem Nummernblock).

    Mit dem hatten wir früher zu MS-DOS Zeiten immer gerne Dateien versteckt,

    die mit DIR dann nicht angezeigt wurden. :)


    Also, ich habe mal jetzt mit PDF-Writer von MS probiert.

    Die links stehenden Leerzeichen werden mal richtig positioniert.

    Wenn du das von XProfan aus machst, hätte ich da noch einen

    Link : http://xprofan.de/start.htm

    Bei den Helfer und Tools im ersten Post hat jemand eine DLL und passenden

    Includes bereit gestellt, die alles noch von Hand zu Fuß macht. Überschrift

    ist PDF-Builder.

    Vielleicht gelingt es dir damit.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

    2 Mal editiert, zuletzt von H.Brill (18. Februar 2022 um 18:12) aus folgendem Grund: Ein Beitrag von H.Brill mit diesem Beitrag zusammengefügt.

  • Martin_K
    Fortgeschrittener
    Reaktionen
    7
    Beiträge
    165
    • 18. Februar 2022 um 20:03
    • #3

    keine reine Textausgabe - ich gebe Bilder und Text aus, unter anderem mit:

    bild& = Create("hPic",-1, "xo.jpg")

    DrawSizedPic bild&, 2, 0 - 690, 171; 0

    Drawtext 55,zeile%, "Position"

    ---
    Xprofan X4, Win7/32, Win10/64

  • Abifiz 18. Februar 2022 um 20:09

    Hat den Titel des Themas von „negativer Einzug beim Druck von PDFs“ zu „Negativer Einzug beim Druck von PDFs“ geändert.
  • ravenheart
    MoRoGeP-Träger 2010
    Reaktionen
    1.007
    Beiträge
    13.197
    • 21. Februar 2022 um 10:14
    • #4

    Frage:

    Habe ich es richtig verstanden? Du HAST bereits ein pdf, und willst das mit dem MS pdf-writer noch mal als in ein pdf "drucken"?

    Rabe

    Computer setzen logisches Denken fort!
    Unlogisches auch....

  • THFR
    Profi
    Reaktionen
    73
    Beiträge
    666
    • 21. Februar 2022 um 11:22
    • #5

    Das Problem könnte am Drucker liegen. Hatte ich mit *.rtf Dateien , da die Abstände/Position nicht in Twip angegeben werden:

    Twip – Wikipedia

    Beim PDF-Drucker vielleicht einen linken Rand setzen.

    Code
      $U RTFHandling.pcu = R_  'TRF-PCU einbinden
      $U objects.pcu = R_
      
      
      $I Profalt.inc
    
       '################################
      'Drucken mit dem Richedit-Control
      '################################
     
      DEF StartDoc(2)      ! "gdi32","StartDocA"
      DEF StartPage(1)     ! "gdi32","StartPage"
      DEF EndPage(1)       ! "gdi32","EndPage"
      DEF EndDoc(1)        ! "gdi32","EndDoc"
      DEF CreateDC(4)      ! "gdi32","CreateDCA"
      DEF DeleteDC(1)      ! "gdi32","DeleteDC"
      DEF GetDeviceCaps(2) ! "gdi32","GetDeviceCaps"
      DEF PrintDlg(1)      ! "comdlg32","PrintDlgA"
     
      Declare Richedit&,RichDLL&,Ende&,Print&,Exit&,FileName$,Driver$,Printer$,Print_PCU&
      Declare Horzres&,Vertres&,PixelsX&,PixelsY&,iWidthTwips&,iHeightTwips&
      Declare iTextOut&,iTextLength&,DocName$
      Declare PrinterDC&
      Declare FormatRange#,PrintDLG#,cRect#
      Declare DocInfo#
      Dim FormatRange#,48
      Dim DocInfo#,12
      Clear DocInfo#
      Dim PrintDLG#,66
      Clear PrintDLG#
      Dim cRect#,16
     
      SetTrueColor 1
      Window 0,0-1040,480
      CLS RGB(196,196,196)
     
    
      Print& = CreateButton(%hwnd,"Druck direkt",900,80,120,24)
      Exit& = CreateButton(%hwnd,"Ende",900,120,120,24)
    
    
      Declare rtf_dll&,rtf_hdc&
      rtf_dll& =  R_INTITFORCREATERTF() 'DLL laden mit PCU
      RichEdit& = R_CREATERICHEDIT(%hWnd,"",0,0,810,420) ' Richedit erstellen mit PCU
      rtf_hdc& = R_PREPAREFORLINEBREAK(RichEdit&) ' Device Context erzeugen mit PCU
      R_Init_object(RichEdit&) 'Zum Bildempfang vorbereiten
      
      
    '  FileName$ = R_RTFLOAD(RichEdit&,"Wakenitz-Album.rtf")
       
      Rtf("LoadRTF",RichEdit&,"Wakenitz-Album.rtf")
    
      DocName$ = "Profan-RTFPrinter"
      declare text$
      Whilenot Ende&
      Waitinput
      If GetFocus(Exit&)
         Ende& = 1
    
    
      ElseIf GetFocus(Print&)
         Long PrintDLG#,0  = 66
         Long PrintDLG#,4  = %hwnd
         Long PrintDLG#,20 = $0140'PD_RETURNDC,PD_PRINTSETUP
     
         PrintDlg(PrintDLG#)
         PrinterDC& = Long(PrintDLG#,16)
         If PrinterDC&
         HorzRes& = GetDeviceCaps(PrinterDC&,8)
         VertRes& = GetDeviceCaps(PrinterDC&,10)
         PixelsX& = GetDeviceCaps(PrinterDC&,88)
         PixelsY& = GetDeviceCaps(PrinterDC&,90)
    '     iWidthTwips& = Int((HorzRes&/PixelsX&))*1440 ' Original
    '     iHeightTwips& = Int((VertRes&/PixelsY&))*1440 ' Original
    
         iWidthTwips& = Int((HorzRes&/PixelsX&))*1450 ' geändert, nun ohne Umbruch in Zeile 1
         iHeightTwips& = Int((VertRes&/PixelsY&))*1350' geändert, nun alle Bilder gedruckt
         ' Bei weiteren Seiten werden dann allerdings nicht mehr alle gedruckt??
    
         Long cRect#,0 = 0
         Long cRect#,4 = 0
         Long cRect#,8 = iWidthTwips&
         Long cRect#,12 = iHeightTwips&
         Long DocInfo#,0 = 12
         Long DocInfo#,4 = ADDR(Docname$)
         Long FormatRange#,0 = PrinterDC&      'HDC
         Long FormatRange#,4 = PrinterDC&      'TargetHDC
         Long FormatRange#,8 = 0               'linker Rand in Twips
         Long FormatRange#,12 = 300              'oberer Rand in Twips
         Long FormatRange#,16 = iWidthTwips&   'rechter Rand in Twips
         Long FormatRange#,20 = iHeightTwips&  'unterer Rand in Twips
         Long FormatRange#,24 = 0              'linker Rand in Twips
         Long FormatRange#,28 = 300              'oberer Rand in Twips
         Long FormatRange#,32 = iWidthTwips&   'rechter Rand in Twips
         Long FormatRange#,36 = iHeightTwips&  'unterer Rand in Twips
         Long FormatRange#,40 = 0              'CharRange-MIN
         Long FormatRange#,44 = -1             'CharRange MAX ( -1 = alles )
     
         iTextOut& = 0
         iTextLength& = SendMessage(RichEdit&, 14, 0, 0)- SendMessage(RichEdit&,186,0,0)
    
         StartDoc(PrinterDC&,DocInfo#)
    
         While 1
             StartPage(PrinterDC&)
             Long FormatRange#,44 = -1
             iTextOut& = SendMessage(RichEdit&, 1081, 1, FormatRange#)
             Long FormatRange#,40 = iTextOut&
             SendMessage(RichEdit&,1075,0,cRect#)
             EndPage(PrinterDC&)
             case (iTextOut& >= iTextLength&) OR (itextOut& = -1): Break
    
         Wend
    
         EndDoc(PrinterDC&)
         SendMessage(RichEdit&, 1081, 1, 0)
         Endif
      Endif
      EndWhile
    
      R_DEINITRTF(RichEdit&,rtf_hdc&,rtf_dll&) 'RTF-Aufräumen
      R_DeInit_object() 'RTF-Aufräumen
      
    
      Dispose FormatRange#
      Dispose DocInfo#
      Dispose PrintDLG#
      DeleteDC(PrinterDC&)
      End
    Alles anzeigen

    Gruß Thomas

    Einmal editiert, zuletzt von THFR (21. Februar 2022 um 11:31)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Windows 11

  1. Datenschutzerklärung
  2. Impressum
Community-Software: WoltLab Suite™