  | 
				VFP ·R¥ÎªÌªÀ°Ï ¥»°Q½×°Ï¬° Visual Foxpro ·R¥ÎªÌ¸gÅç¥æ¬yªº¦a¤è, ½Ð¦h¦h§Q¥Î"·j´M"ªº¥\¯à, ¥ý¬d¬Ý¬Ý¦³µL«e¨Ò¥i´`, ¦pªGÁÙ¦³¤£À´ªº¦Aµo°Ý. ³¡¥÷¥DÃD¦³ªþ¥[ÀÉ®×, ¶·¥ýµù¥U¦¨¬°ªÀ°Ï©~¥Á¤~¥i¥H¤U¸ü.   
				 | 
			 
		 
		 
	
		| ¤W¤@½g¥DÃD :: ¤U¤@½g¥DÃD   | 
	 
	
	
		| µoªí¤H | 
		¤º®e | 
	 
	
		iswith
 
 
  µù¥U®É¶¡: 2022-11-04 ¤å³¹: 93
 
  ²Ä 1 ¼Ó
  | 
		
			
				 µoªí©ó: ¬P´Á¤» ¤Q¤@¤ë 11, 2023 3:44 pm    ¤å³¹¥DÃD: 将¤ô¦L绘¨î为轮¹ø图§Î¸ô径,¦³谁¥Î过这Ïú¤èªk吗¡H | 
				     | 
			 
			
				
  | 
			 
			
				迟迟§ä¤£¨ìì¦]©Ò¥H¡A为Ô£绘¨î¤£¤F¡C¡C¡C¡C
 
*PdfSharp 类,将¤ô¦L绘¨î为轮¹ø图§Î¸ô径
 
*¨Ï¥ÎPdfSharp¡AÉOVFP ªºGDI+类¦ü¡AXGraphics
 
*´£¨ÑXColor¡]颜¦â¡^            string
 
*    XPen  ¡]画笔¡^            string
 
*    XBrush¡]画¨ê¡^            object
 
*    XFont  (¦rÊ^)             object
 
*    XPoint (¦ì¸m)             string
 
*    XImage (图¤ù)             object  BMP GIF PNG JPEG TIFF
 
*    XStringFormat(®æ¦¡)    object
 
   
 
Local lcPath
 
If _vfp.StartMode = 0 Then
 
   m.lcPath = Addbs( Justpath( _vfp.ActiveProject.Name  ))
 
Else
 
   m.lcPath = Addbs( Justpath( sys(16,0) )  )
 
Endif  
 
 
Set Default To ( m.lcPath )
 
 
Set Procedure To netsuite.reg.prg   Additive
 
 
*--载¤JH¤å¥ó
 
#INCLUDE Netsuite.H
 
 
 
Public oPdfSharp
 
m.oPdfSharp = Createobjects ( "Netsuite.PdfSharp" )
 
 
 
*1--¥´开¤@个PDF¤å档对¶H
 
Local loDocument    ;
 
    , lcErrMsg        ;
 
    , lnPageCount    ;
 
    , lcPDFFilename
 
 
m.lcPDFFilename = Getfile( "PDF" )   
 
If Empty( m.lcPDFFilename )  Then  
 
   Return
 
Endif
 
 
m.lcPassword  = ""
 
 
Clear
 
?"¥´开¤å档¡G"
 
??m.lcPDFFilename
 
 
Do While (.T.)
 
   
 
   m.lcErrMsg    = ""
 
 
   *--¦pªG设¸m¦³拥¦³ªÌ±K码ÉO¥´开±K码时¡A当«e¤å档»Ýn×§ï¡A©Ò¥Hɬ¥ý¨Ï¥Î拥¦³ªÌ±K码,§_侧会¤@ª½´`环
 
   m.loDocument    = m.oPdfSharp.OpenPdf( m.lcPDFFilename , @lcErrMsg , m.lcPassword , PdfDocumentOpenMode_Modify )
 
   
 
   If  Isnull( m.loDocument )Then
 
 
       *该¤è¦¡´Nªí¥Ü¥´开»Ýn±K码
 
       If "password" $ Lower( m.lcErrMsg ) && And "open"  $ Lower( m.lcErrMsg ) Then
 
           
 
           *弹¥X±K码¥´开对话®Ø
 
           Local lofrm_pdfpassword ;
 
               , loPDFOpenPassword
 
                    
 
           Do Form frm_pdfpassword.scx Name m.lofrm_pdfpassword With Justfname( m.lcPDFFilename ) ;
 
                                                                      ,Null  To m.loPDFOpenPassword
 
           
 
           If !Type("m.loPDFOpenPassword"  ) == "O"  Or Isnull( m.loPDFOpenPassword)  Then
 
               Exit
 
           Endif
 
 
           *--¨ú®ø
 
           If !m.loPDFOpenPassword.Result == "OK" Then  
 
              Exit  
 
           Else
 
                 m.lcPassword = m.loPDFOpenPassword.Password
 
           Endif     
 
                        
 
       Endif
 
 
  Else
 
       Exit
 
  Endif
 
 
EndDo
 
 
If !Type( "m.loDocument" ) == "O" Or  Isnull( m.loDocument )Then
 
   Return
 
Endif
 
 
 
?"总页数¡G"
 
m.lnPageCount   = m.oPdfSharp.GetPageCount( m.loDocument )
 
??m.lnPageCount
 
 
IF !Empty( m.lcErrMsg ) Then
 
   Messagebox( m.lcErrMsg , 16 )
 
   Return
 
Endif
 
 
*2.--获¨ú PdfPage 对¶H(ª`·N²Ä¤@页从0开©l)
 
Local loPage ;
 
    , lnPage ;
 
    , lnPageWidth;
 
    , lnPageHeight
 
   
 
m.lnPage       = 0
 
m.loPage       = m.oPdfSharp.Getpage( m.loDocument , m.lnPage)
 
 
 
?"页宽(¥H点为单¦ì)¡G"
 
m.lnPageWidth  = m.oPdfSharp.GetpageSize( m.loPage, 1 )
 
??m.lnPageWidth
 
 
?"页°ª(¥H点为单¦ì)¡G"
 
m.lnPageHeight = m.oPdfSharp.GetpageSize( m.loPage , 2 )
 
??m.lnPageHeight
 
 
 
*--²K¥[¤ô¦L----------------------------------------------------------------
 
*  说©ú¡G¨Ï¥ÎXGraphicsPdfPageOptions.Prepend,¤ô¦L将绘¨î¦bì©lPDF页±¤U¤è.
 
*  ¤j¦h数PDF¤å¥ó¥Ñ³z©úI´º¤Wªº¶Â¦â¤å¥»组¦¨,
 
*  ¤ô¦L将¦b¨º¨½¥i见(±z¥i¥H³q过¦bAdobe Reader¤¤¿E¬¡³z©úÊI®æ来检¬d).
 
*  对¤_¨ã¦³纯I´ºªºPDF页±(¨Ò¦p图¹³,¨ã¦³I´º颜¦âªºªí®æ,¡K¡K),¤ô¦L将¤£¥i见时¡A请偿试¤èªk¤G
 
 
If m.oPdfSharp.GetVer( m.loDocument ) < 14 Then
 
   m.oPdfSharp.SetVer( m.loDocument , 14 )
 
Endif
 
 
 
Local lcWaterString
 
m.lcWaterString = "¤ô¦L测试PDFSharp V1.0 For ZHZ 2023"
 
 
 
?"创«Ø红¦â笔"  &&int alpha, int red, int green, int blue,double width = 0.5
 
Local loXPen
 
m.loXPen = m.oPdfSharp.newXPen(128, 255, 0, 0 , 2 )
 
 
*--XStringFormat(®æ¦¡)
 
?"创«Ø XStringFormat(®æ¦¡)"
 
Local loXStringFormat
 
m.loXStringFormat = m.oPdfSharp.newXStringFormat( XStringAlignment_Near, XLineAlignment_Near )
 
 
?"创«Ø XFont(¦rÊ^):"
 
Local loFont     ;
 
    , lnFontSize;
 
    , lcFontName;
 
    , logfx     ;
 
    , loXPen    ;
 
    , lcXPoint  ;
 
    , loXGraphicsPath
 
   
 
   
 
m.lnFontSize   = 30  
 
m.lcFontName   = "SimHei"
 
m.loXFont       = m.oPdfSharp.newxFont( m.lcFontName , m.lnFontSize , XFontStyle_Bold)
 
 
 
?"创«Ø XGraphicsPath(图§Î¸ô径):"
 
m.loXGraphicsPath = m.oPdfSharp.newxGraphicsPath()
 
 
 
?"´`环¾ã个¤å档页,绘¨C页¤ô¦L"
 
For m.lnCount = 0 To m.lnPageCount-1
 
    With m.oPdfSharp
 
         
 
         *--获¨ú 页± XGRAPHICS对¶H¡A¥H«K¦b现¦³内®e¤W¤è绘¨î
 
         m.logfx      = .FromPdfPage2( m.oPdfSharp.Getpage( m.loDocument , m.lnCount ) , XGraphicsPdfPageOptions_Prepend ) &&¦Ò虑¨ì层¦¸
 
         
 
         *--获¨ú¤å¥»ªº¤j¤p¡]¥H点为单¦ì¡^ 测¶q该XFont¦boRenderer(XGraphics)¤¤ªº宽°ª
 
         m.lnFontWidth    = .GetFontSize( m.lcWaterString , m.logfx  , m.loXFont , 1    )
 
         m.lnFontHeight    = .GetFontSize( m.lcWaterString , m.logfx  , m.loXFont , 2    )
 
         
 
         *--¦b页±¤¤¤ß©wúå±Û转转换 转换¨¤«×
 
         *±Û转¦³两个¥Dn¨ç数TranslateTransform¡]int x,int y¡^¤ÎRotateTransform(int angle)
 
         *¥ÎTranslateTransform() ¨ç数¡A参数x¡Ay设¸m为«Ý±Û转椭圆¤¤¤ß¡A则§¤标ì点会²¾¨ì¡]x¡Ay¡^
 
         *¨Ï¥ÎRotateTransform()¨ç数¡Aangle设¸m为§Æ±æ±Û转ªº¾ã数¨¤«×¡A±Û转¤è¦V¬O顺时针
 
         m.logfx.TranslateTransform( m.lnPageWidth / 2 , m.lnPageHeight /2 )
 
         *m.logfx .RotateTransform( -TAN( m.lnPageHeight / m.lnPageWidth) * 180 / Pi()   )
 
         m.logfx.RotateTransform( -45 )
 
         m.logfx.TranslateTransform( -m.lnPageWidth / 2, -m.lnPageHeight /2  )
 
 
         
 
         *--xPoint(¦ì¸m) ¥²须¥H","为¤À¹j²Å
 
         m.lcxPoint     =  Alltrim( Transform( (m.lnPageWidth  - m.lnFontWidth  ) / 2 ) ) + "," +;
 
                         Alltrim( Transform( (m.lnPageHeight - m.lnFontHeight ) / 2  ) )
 
 
         *--将¤å¥»²K¥[¨ì¸ô径
 
         If !.AddString( m.loXGraphicsPath  ;
 
                        , m.lcWaterString      ;
 
                        , m.loXFont            ;
 
                        , m.lcXPoint            ;
 
                        , m.loXStringFormat     ;
 
                        , @lcErrMsg ) Then
 
                        
 
             MESSAGEBOX( m.lcErrMsg  , 16 )
 
             Exit
 
         Endif                 
 
 
 
         *--¦E¥X¸ô径ªº轮¹ø
 
         If !.DrawPath( m.logfx              ;
 
                       , m.loXPen           ;
 
                       , m.loXGraphicsPath ;
 
                       , @lcErrMsg ) Then
 
 
 
             MESSAGEBOX( m.lcErrMsg  , 16 )
 
             Exit
 
         Endif
 
    Endwith
 
Endfor
 
 
*--¥t¦s
 
m.lcPDFFilename = Addbs( m.lcPath) + [testdata\ConvertPDF\] + Justfname(  m.lcPDFFilename )
 
 
*--«O¦s(Y¤å¥óÉO¥´开¤å¥ó¦W¤@ý©´NÂÐ盖«O¦s)
 
m.oPdfSharp.Save( m.loDocument , m.lcPDFFilename , @lcErrMsg  )
 
IF !Empty( m.lcErrMsg ) Then
 
   m.oPdfSharp.PdfClose( m.loDocument  )
 
   Messagebox( m.lcErrMsg , 16 )
 
   Return
 
Endif
 
 
*--关闭PDF
 
m.oPdfSharp.PdfClose( m.loDocument  )
 
 
*--预览PDF
 
Do Form frm_pdfmain_demo.scx with m.lcPDFFilename | 
			 
		  | 
	 
	
		| ¦^³»ºÝ | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
±z µLªk ¦b³oÓª©±µoªí¤å³¹ ±z µLªk ¦b³oÓª©±¦^ÂФ峹 ±z µLªk ¦b³oÓª©±½s¿è¤å³¹ ±z µLªk ¦b³oÓª©±§R°£¤å³¹ ±z µLªk ¦b³oÓª©±¶i¦æ§ë²¼ ±z µLªk ¦b³oÓª©±ªþ¥[ÀÉ®× ±z µLªk ¦b³oÓª©±¤U¸üÀÉ®×
  | 
   
  
  
Powered by phpBB © 2001, 2005 phpBB Group ¥¿Å餤¤å»y¨t¥Ñ phpbb-tw ºûÅ@»s§@ 
		 |