VFP ·R¥ÎªÌªÀ°Ï ­º­¶ 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¸ü.
 
 ±`¨£°ÝÃD±`¨£°ÝÃD   ·j´M·j´M   ·|­û¦Cªí·|­û¦Cªí   ·|­û¸s²Õ·|­û¸s²Õ   ·|­ûµù¥U·|­ûµù¥U 
 ­Ó¤H¸ê®Æ­Ó¤H¸ê®Æ   µn¤JÀˬd±zªº¨p¤H°T®§µn¤JÀˬd±zªº¨p¤H°T®§   µn¤Jµn¤J

将¤ô¦L绘¨î为轮¹ø图§Î¸ô径,¦³谁¥Î过这Ïú¤èªk吗¡H

 
µoªí·s¥DÃD   ¦^ÂÐ¥DÃD    VFP ·R¥ÎªÌªÀ°Ï ­º­¶ -> VFP °Q½×°Ï
¤W¤@½g¥DÃD :: ¤U¤@½g¥DÃD  
µoªí¤H ¤º®e
iswith



µù¥U®É¶¡: 2022-11-04
¤å³¹: 35


²Ä 1 ¼Ó

µoªíµ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úå±Û转转换 转换¨¤«×
*±Û转¦³两个¥D­n¨ç数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
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§
±q¤§«eªº¤å³¹¶}©lÅã¥Ü:   
µoªí·s¥DÃD   ¦^ÂÐ¥DÃD    VFP ·R¥ÎªÌªÀ°Ï ­º­¶ -> VFP °Q½×°Ï ©Ò¦³ªº®É¶¡§¡¬° ¥x¥_®É¶¡ (GMT + 8 ¤p®É)
²Ä1­¶(¦@1­¶)

 
«e©¹:  
±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§@