1414using Org . BouncyCastle . Crypto . Generators ;
1515using PDFQFZ . Library ;
1616using System . Text ;
17+ using System . Threading . Tasks ;
1718
1819namespace PDFQFZ
1920{
@@ -893,8 +894,28 @@ private bool PDFWatermark(string inputfilepath, string outputfilepath)
893894 {
894895 continue ;
895896 }
897+ int random_w = 0 , random_h = 0 ;
898+ Random random = new Random ( ) ;
899+ random_w = random . Next ( - 5 , 6 ) ; //随机偏移
900+ random_h = random . Next ( - 5 , 6 ) ; //随机偏移
896901 wbl = Convert . ToSingle ( textPx . Text ) ; //这里根据比例来定位
902+ if ( ( wbl + 0.01f * random_w ) < 1f )
903+ {
904+ wbl = wbl + 0.01f * random_w ;
905+ }
906+ else
907+ {
908+ wbl = wbl - 0.01f * random_w ;
909+ }
897910 hbl = 1 - Convert . ToSingle ( textPy . Text ) ; //这里根据比例来定位
911+ if ( ( hbl - 0.01f * random_h ) > 0f )
912+ {
913+ hbl = hbl - 0.01f * random_h ;
914+ }
915+ else
916+ {
917+ hbl = hbl + 0.01f * random_h ;
918+ }
898919 }
899920 else
900921 {
@@ -1751,29 +1772,13 @@ private void comboQmtype_SelectionChangeCommitted(object sender, EventArgs e)
17511772
17521773 }
17531774 //选择PDF预览文件
1754- private void comboPDFlist_SelectionChangeCommitted ( object sender , EventArgs e )
1775+ private async void comboPDFlist_SelectionChangeCommitted ( object sender , EventArgs e )
17551776 {
17561777 dtPages . Rows . Clear ( ) ; //清空PDF页下拉项
17571778 previewPath = comboPDFlist . SelectedValue . ToString ( ) ;
17581779 if ( previewPath != "" )
17591780 {
1760- PDFFile viewPdfFile = PDFFile . Open ( previewPath ) ;
1761- imgStartPage = 1 ;
1762- imgPageCount = viewPdfFile . PageCount ;
1763- viewPdfimgs = new Bitmap [ imgPageCount ] ;
1764- int dpi = 72 ;
1765- //一次性把PDF所有页都读取到一个图片数组,虽然很卡,但是好像也没有啥好办法
1766- for ( int i = 0 ; i < viewPdfFile . PageCount ; i ++ )
1767- {
1768- Bitmap pageImage = viewPdfFile . GetPageImage ( i , dpi ) ;
1769- viewPdfimgs [ i ] = pageImage ;
1770- //pageImage.Save("D:\\tmp\\img\\" + i + ".png", System.Drawing.Imaging.ImageFormat.Png);
1771-
1772-
1773- dtPages . Rows . Add ( new object [ ] { imgStartPage + i , imgStartPage + i } ) ;
1774- }
1775- viewPdfFile . Dispose ( ) ;
1776- viewPDFPage ( ) ;
1781+ await LoadPageImagesAsync ( previewPath ) ;
17771782 }
17781783 else
17791784 {
@@ -1791,6 +1796,30 @@ private void comboPDFlist_SelectionChangeCommitted(object sender, EventArgs e)
17911796 }
17921797
17931798 }
1799+ async Task LoadPageImagesAsync ( string previewPath )
1800+ {
1801+ PDFFile viewPdfFile = PDFFile . Open ( previewPath ) ;
1802+ imgStartPage = 1 ;
1803+ imgPageCount = viewPdfFile . PageCount ;
1804+ viewPdfimgs = new Bitmap [ imgPageCount ] ;
1805+ int dpi = 72 ;
1806+
1807+ // 使用异步方式加载第一页
1808+ viewPdfimgs [ 0 ] = await Task . Run ( ( ) => viewPdfFile . GetPageImage ( 0 , dpi ) ) ;
1809+ dtPages . Rows . Add ( new object [ ] { 1 , 1 } ) ;
1810+ viewPDFPage ( ) ;
1811+
1812+ // 异步加载剩余的页面
1813+ for ( int i = 1 ; i < viewPdfFile . PageCount ; i ++ )
1814+ {
1815+ int currentIndex = i ;
1816+ viewPdfimgs [ currentIndex ] = await Task . Run ( ( ) => viewPdfFile . GetPageImage ( currentIndex , dpi ) ) ;
1817+ currentIndex ++ ;
1818+ dtPages . Rows . Add ( new object [ ] { currentIndex , currentIndex } ) ;
1819+ }
1820+
1821+ viewPdfFile . Dispose ( ) ;
1822+ }
17941823 //根据印章类型切换窗口大小
17951824 private void comboYz_SelectionChangeCommitted ( object sender , EventArgs e )
17961825 {
0 commit comments