|
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 ¤å³¹: 67
²Ä 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§@
|