2019年3月24日 星期日

system.web/identity@impersonate 設定為 true。


http://www.programmer-club.com.tw/ShowSameTitleN/aspdotnet/9363.html

https://www.itread01.com/p/1421669.html


HTTP 錯誤 500.24 - Internal Server Error的解決方法 錯誤提示:

最可能的原因:   system.web/identity@impersonate 設定為 true。    
解決辦法: 現在經典模式 連微軟都幾乎放棄了  
原設想是為iis不斷升級 提供的一種相容模式。即是相容模式,一定要放棄一些原有的設定————讓所有經典模式的站點使用經典程式池。這樣就容易造成記憶體混淆。 
所以最好是用整合模式。 
對於500.24 可以通過在配置檔案中確保存在 
<system.webServer>  
<validation validateIntegratedModeConfiguration="false"/>  
</system.webServer>

百聞不如一見,百見不如一做,只有做了,才知道問題出現在哪兒,才能去解決問題。


<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.6.1"/>
    <httpRuntime targetFramework="4.6.1"/>
    <identity impersonate="true"/>
  </system.web>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
  </system.webServer>
</configuration>


[咨询站长] ASP.NET 怎么实现pdf转jpg [复制链接]

http://www.sufeinet.com/thread-18284-1-1.html

C#技术分享【PDF转换成图片——13种方案】(2013-07-25重新整理) .
Acrobat.dllc#PDFPDFRender4NET.dllpdf转图片
写在最前面:为了节约大家时间,博主把最常用的方法写在第一条,如果不满足您的需要,您可以继续往后看。

如果看完全文还是不能解决您的问题,欢迎加博主的微博、QQ群(274281457)、QQ(605494869)进行讨论。

关注微博(http://weibo.com/605494869)的童鞋,可以直接找博主索取全部DLL和测试工程(请原谅我合理刷粉)。

GitHub Clone Adress : https://github.com/stone0090/OfficeTools.Pdf2Image.Word2Image.git (you get it).



前段时间公司安排了个任务:要求交付一个DLL,实现【PDF转换成图片】,最好的效果是能够掌握所有源码,实在不行才交付第三方DLL。研究了6个工作日+1双休+每晚9点下班,逛遍了国内外各种论坛,还是没能成功整出源码,但发现了很多有用的工具和其他工具,在此分享给大家。



1、【O2S.Components.PDFRender4NET.dll】,第三方DLL,可以实现PDF转图片,支持32位系统、64位系统(部分第三方dll在64位系统下运行报错)。

官方试用版的dll左上角会有一排红色水印,下面这个是破解版的没有水印,博主使用了一年多基本没有出过问题,推荐使用。

DLL 下载地址:http://download.csdn.net/detail/shi0090/4066107
测试工程 下载地址:http://download.csdn.net/detail/shi0090/4068558



2、【Acrobat.dll】,Adobe官方提供的接口,可以实现PDF转图片。这个方法需要安装Adobe Acrobat X Pro,从安装文件找到Acrobat.dll引用到项目中。

毕竟是Adobe官方提供的接口,其转换效率要比其他的DLL要快多了,而且应该更可靠一些,但是在IIS下运行会比较麻烦(QQ群里有朋友已经实现了)

如果对转换速度、图片质量要求很高的童鞋,可以参考此方案,但是实现过程太麻烦,大家自己权衡,博主对此方法并没有深入研究了。

测试工程 下载地址: http://download.csdn.net/detail/shi0090/4068502

参考地址:http://www.codeproject.com/Artic ... -from-PDF-Documents


3、【PDFLibNet.dll】,第三方DLL,只支持32位系统,可以实现PDF转图片,下面这个版本没有水印。

DLL 下载地址:http://download.csdn.net/detail/shi0090/4066096

测试工程 下载地址:http://download.csdn.net/detail/shi0090/4068522



4、【SautinSoft.PdfFocus.dll】,第三方DLL,可以实现PDF转图片,但转出来的图片左上角有一排红色水印。

DLL 下载地址:http://download.csdn.net/detail/shi0090/4066111
测试工程 下载地址:http://download.csdn.net/detail/shi0090/4068561



5、【TallComponents.PDF.Rasterizer.dll】,第三方DLL,可以实现PDF转图片,但转出来的图片有个较大的水印。

DLL 下载地址:http://download.csdn.net/detail/shi0090/4066112

测试工程 下载地址:http://download.csdn.net/detail/shi0090/4068563



6、【Apitron.PDF.Rasterizer.dll】,第三方DLL,可以实现PDF转图片,但转出来的图片有个较大的红色水印。

DLL 下载地址:http://download.csdn.net/detail/shi0090/5814803

测试工程 下载地址:http://download.csdn.net/detail/shi0090/5814857



7、【XpdfRasterizer.dll】,第三方DLL,可以实现PDF转图片。

DLL 下载地址:http://download.csdn.net/detail/shi0090/4066115
测试工程 下载地址:这个弄不见了,如果使用要使用这个的话,一定要注意Regsvr32注册,要不然转换会失败的。



8、【abcpdf.dll】,第三方DLL,可以实现PDF转图片,但是需要安装abcpdf,所以使用起来不算太放方便。

DLL 下载地址:http://download.csdn.net/detail/shi0090/4066144
测试工程 下载地址:http://download.csdn.net/detail/shi0090/4068564



9、【Ghostscript】,第三方DLL,可以实现PDF转图片,只支持32位系统,貌似网上很多人都会采用这个方法(据说功能强大),个人觉得代码太麻烦没有采用,没有深入研究。

DLL  下载地址:http://download.csdn.net/detail/shi0090/4066005
测试工程 下载地址:http://download.csdn.net/detail/shi0090/4068486
参考地址:http://www.codeproject.com/Artic ... s-using-Csharp.aspx
参考地址:http://www.codeproject.com/Artic ... ing-Ghostscript-API



10、【ImageMagick】,C语言开源PDF处理工具,可以将实现PDF转换图片,因为博主使用的C#,所以C语言的工具就没有深入研究了。

DLL和源码 下载地址:http://download.csdn.net/detail/shi0090/4066040



11、【iTextSharp.dll】,C# 开源PDF处理工具,可以任意操作PDF,并可以提取PDF中的文字和图片,但不能直接将PDF转换成图片。
DLL和源码 下载地址:http://download.csdn.net/detail/shi0090/4065982
中文帮助文档 下载地址:http://download.csdn.net/detail/shi0090/4065986
提取文字测试工程 下载地址:http://download.csdn.net/detail/shi0090/4068429
提取图片测试工程 下载地址:http://download.csdn.net/detail/shi0090/4068428
官方网站:http://itextpdf.com/



12、【PdfSharp.dll】,C# 开源PDF处理工具,可以任意操作PDF,也可以实现从PDF提取图片,但不能直接将PDF转换成图片。
DLL和源码 下载地址:http://download.csdn.net/detail/shi0090/4066060 
提取图片测试工程 下载地址:http://download.csdn.net/detail/shi0090/4068448 

以上两个开源C#工具都可以很好处理PDF文档,但不满足我的要求直接把PDF转成IMAGE。



13、QQ群里有人推荐【PDFToX.dll】速度和质量都不错,就是不太稳定,有兴趣的朋友可以自行研究一下~

官方网站:http://www.ycanpdf.cn/

官方下载:http://www.ycanpdf.cn/software/PDFtoX.rar

2019年3月22日 星期五

c#,將pdf文件轉換成圖片文件

http://www.aspphp.online/bianchen/dnet/cxiapu/cxprm/201701/192161.html

本文采用Adobe Acrobat9.0的COM組件,將Pdf文件的每一頁轉換成對應的圖片文件。
開發環境:VS2010,.Net Framework4.0,Adobe Acrobat9.0。
工程中添加COM引用:Adobe Acrobat 9.0 Type Library(必須裝了Adobe Acrobat9.0才會有)。

思路:
1、需要用到的COM對象:
    1)CAcroPDDoc:Acrobat文檔對象。
    2)CAcroPDPage:頁對象。
    3)CAcroRect:用來描述頁中一個矩形區域的對象。
    4)CAcroPoint:實際上代表的是Size。

2、轉換過程:
   1)打開文檔。
   2)取出每一頁。
   3)獲取每一頁的大小,生成一個表示該頁的矩形區域。
   4)將當前頁的指定區域編碼成圖片,並且復制到剪貼板中。
   5)將剪貼板中的圖片取出,保存為圖片文件。

轉換函數代碼:
        public static void ConvertPdf2Image(string pdfFilePath, string imageDirectoryPath,
            int beginPageNum, int endPageNum, ImageFormat format, double zoom = 1) {
          
            Acrobat.CAcroPDDoc pdfDoc = null;
            Acrobat.CAcroPDPage pdfPage = null;
            Acrobat.CAcroRect pdfRect = null;
            Acrobat.CAcroPoint pdfPoint = null;
            //1)
            //生成操作Pdf文件的Com對象
              pdfDoc = (Acrobat.CAcroPDDoc)Microsoft.VisualBasic.Interaction.CreateObject("AcroExch.PDDoc", "");
            //檢查輸入參數
              if (!pdfDoc.Open(pdfFilePath)) {
                throw new FileNotFoundException(string.Format("源文件{0}不存在!", pdfFilePath));
            }
            if (!Directory.Exists(imageDirectoryPath)) {
                Directory.CreateDirectory(imageDirectoryPath);
            }
            if (beginPageNum <= 0) {
                beginPageNum = 1;
            }
            if (endPageNum > pdfDoc.GetNumPages() || endPageNum <= 0) {
                endPageNum = pdfDoc.GetNumPages();
            }
            if (beginPageNum > endPageNum) {
                throw new ArgumentException("參數\"beginPageNum\"必須小於\"endPageNum\"!");
            }
            if (format == null) {
                format = ImageFormat.Png;
            }
            if (zoom <= 0) {
                zoom = 1;
            }
            //轉換
              for (int i = beginPageNum; i <= endPageNum; i++) {
                //2)
                //取出當前頁
                  pdfPage = (Acrobat.CAcroPDPage)pdfDoc.AcquirePage(i - 1);
                //3)
                //得到當前頁的大小
                   pdfPoint = (Acrobat.CAcroPoint)pdfPage.GetSize();
                //生成一個頁的裁剪區矩形對象
                   pdfRect = (Acrobat.CAcroRect)Microsoft.VisualBasic.Interaction.CreateObject("AcroExch.Rect", "");
                //計算當前頁經縮放後的實際寬度和高度,zoom==1時,保持原比例大小
                   int imgWidth = (int)((double)pdfPoint.x * zoom);
                int imgHeight = (int)((double)pdfPoint.y * zoom);
                //設置裁剪矩形的大小為當前頁的大小
                   pdfRect.Left = 0;
                pdfRect.right = (short)imgWidth;
                pdfRect.Top = 0;
                pdfRect.bottom = (short)imgHeight;
                //4)
                //將當前頁的裁剪區的內容編成圖片後復制到剪貼板中
                  pdfPage.CopyToClipboard(pdfRect, 0, 0, (short)(100 * zoom));
                //5)
                IDataObject clipboardData = Clipboard.GetDataObject();
                //檢查剪貼板中的對象是否是圖片,如果是圖片則將其保存為指定格式的圖片文件
                  if (clipboardData.GetDataPresent(DataFormats.Bitmap)) {
                    Bitmap pdfBitmap = (Bitmap)clipboardData.GetData(DataFormats.Bitmap);
                    pdfBitmap.Save(
                        Path.Combine(imageDirectoryPath, i.ToString("0000") + "." + format.ToString()), format);
                    pdfBitmap.Dispose();
                }
            }
            //關閉和釋放相關COM對象
              pdfDoc.Close();
            Marshal.ReleaseComObject(pdfRect);
            Marshal.ReleaseComObject(pdfPoint);
            Marshal.ReleaseComObject(pdfPage);
            Marshal.ReleaseComObject(pdfDoc);
        }

2019年3月20日 星期三

[c#]自製排程器

https://dotblogs.com.tw/eaglewolf/2011/07/26/32133

StackTrace 及 執行緒-System.Threading.Timer的使用

https://dotblogs.com.tw/yc421206/2010/10/24/18546

https://dotblogs.com.tw/brooke/2015/10/12/153547

https://ithelp.ithome.com.tw/articles/10195452?sc=rss.qu

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
using System.Timers;
using System.Windows.Forms;
//匯入命名空間
using ThreadingTimer = System.Threading.Timer;
using TimersTimer = System.Timers.Timer;


namespace ThreadTimer
{
    public partial class Form1 : Form
    {
        //程式開始
        ThreadingTimer _ThreadTimer = null;
        TimersTimer _TimersTimer = null;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Thread t = Thread.CurrentThread;
            bool IsThreadPool = t.IsThreadPoolThread;
            bool IsBackground = t.IsBackground;
            t.Name = "Main Thread";
            string msg = string.Format("Thread[{0}]:{1},Is ThreadPool=[{2}],Is Background=[{3}]", t.ManagedThreadId, t.ThreadState, IsThreadPool, IsBackground);
            this.Text = msg;
         
        }

        private void button2_Click(object sender, EventArgs e)
        {
         
            this._TimersTimer = new TimersTimer();
            this._TimersTimer.Interval = 100;
            this._TimersTimer.Elapsed += new System.Timers.ElapsedEventHandler(_TimersTimer_Elapsed);
            this._TimersTimer.Start();
         
        }
       
        private void _TimersTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
           
            Thread t = Thread.CurrentThread;
            bool IsThreadPool = t.IsThreadPoolThread;
            bool IsBackground = t.IsBackground;
            string msg = string.Format("Thread[{0}]:{1},Is ThreadPool=[{2}],Is Background=[{3}]", t.ManagedThreadId, t.ThreadState, IsThreadPool, IsBackground);
            if (this.listBox2.InvokeRequired)
            {
                listBox2.Invoke(new Action<string>(s => {
                    this.listBox2.Items.Add(s);
                }), msg);
            }
            else
            {
                this.listBox2.Items.Add(msg);

            }
           
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string currentName = new StackTrace(true).GetFrame(0).GetMethod().Name;
            //TimerCallback委派可用來指定 Timer 呼叫的方法, 1.等多久再開始  100.隔多久反覆執行
            this._ThreadTimer = new ThreadingTimer( new System.Threading.TimerCallback(CallbackMethod), currentName, 1, 100);
        }
        void CallbackMethod(object State)
        {
            string methodName = State.ToString();
            Thread t = Thread.CurrentThread;
            bool IsThreadPool = t.IsThreadPoolThread;
            bool IsBackground = t.IsBackground;
            string msg = string.Format("Thread[{0}]:{1},Is ThreadPool=[{2}],Is Background=[{3}]", t.ManagedThreadId, t.ThreadState, IsThreadPool, IsBackground);
            this.BeginInvoke(new UpdateControl(_mUpdateControl), new object[] { this.listBox1, msg });
        }
        delegate void UpdateControl(Control Ctrl, string Msg);
        private object _objLock = new object();
        void _mUpdateControl(Control Ctrl, string Msg)
        {
            //多執行續同時進行時,叫用這個方法時,看有沒有被lock,如有被lock,等他然後再跑裡面的東西
            lock (this._objLock)
            {
                if (Ctrl is ListBox)
                    ((ListBox)Ctrl).Items.Add(Msg);
            }
        }
    }
}

2019年3月16日 星期六

[C#] ComboBox 預設值

http://jengting.blogspot.com/2016/11/ComboBox-DefaultValue.html

https://adon988.logdown.com/posts/7798906-winforms-c-combobox-several-ways-to-set-values

C#使用Timer.Interval指定时间间隔与指定时间执行事件

C#使用Timer.Interval指定时间间隔与指定时间执行事件

https://www.cnblogs.com/wusir/p/3636149.html

C#中,Timer是一个定时器,它可以按照指定的时间间隔或者指定的时间执行一个事件。
指定时间间隔是指按特定的时间间隔,如每1分钟、每10分钟、每1个小时等执行指定事件;
指定时间是指每小时的第30分、每天10:30:30(每天的10点30分30秒)等执行指定的事件;
在上述两种情况下,都需要使用 Timer.Interval,方法如下:
1、按特定的时间间隔:
using System;
using System.Timers;

namespace TimerExample
{
    class Program
    {

        static void Main(string[] args)
        {
            System.Timers.Timer timer = new System.Timers.Timer();
            timer.Enabled = true;
            timer.Interval = 600000; //执行间隔时间,单位为毫秒; 这里实际间隔为10分钟  
            timer.Start();
            timer.Elapsed += new System.Timers.ElapsedEventHandler(test); 

            Console.ReadKey();
        }

        private static void test(object source, ElapsedEventArgs e)
        {

              Console.WriteLine("OK, test event is fired at: " + DateTime.Now.ToString());
           
        }
    }
}
上述代码,timer.Inverval的时间单位为毫秒,600000为10分钟,所以,上代码是每隔10分钟执行一次事件test。注意这里是Console应用程序,所以在主程序Main中,需要有Console.Readkey()保持Console窗口不关闭,否则,该程序执行后一闪就关闭,不会等10分钟的时间。
2、在指定的时刻运行:
using System;
using System.Timers;

namespace TimerExample1
{
    class Program
    {

        static void Main(string[] args)
        {
            System.Timers.Timer timer = new System.Timers.Timer();
            timer.Enabled = true;
            timer.Interval = 60000;//执行间隔时间,单位为毫秒;此时时间间隔为1分钟  
            timer.Start();
            timer.Elapsed += new System.Timers.ElapsedEventHandler(test); 

            Console.ReadKey();
        }

        private static void test(object source, ElapsedEventArgs e)
        {

            if (DateTime.Now.Hour == 10 && DateTime.Now.Minute == 30)  //如果当前时间是10点30分
                Console.WriteLine("OK, event fired at: " + DateTime.Now.ToString());
            
        }
    }
上述代码,是在指定的每天10:30分执行事件。这里需要注意的是,由于是指定到特定分钟执行事件,因此,timer.Inverval的时间间隔最长不得超过1分钟,否则,长于1分钟的时间间隔有可能会错过10:30分这个时间节点,从而导致无法触发该事件。

2019年3月14日 星期四

[C#] Windows Service 的啟動、停止和重新啟動的功能

[C#] Windows Service 的啟動、停止和重新啟動的功能

http://adamagod.blogspot.com/2013/05/c-windows-service.html

C# ASP.NET 控制windows服務的 開啟和關閉 以及重啟

https://www.itread01.com/p/1425557.html

ps:要用系統管理人員權限

2019年3月13日 星期三

2019年3月10日 星期日

win10還原內建的圖示

https://www.techbang.com/posts/49482-win-10-training-workshop-repair-a-damaged-system-built-in-icon

https://answers.microsoft.com/zh-hant/windows/forum/all/%E5%A6%82%E4%BD%95%E4%BF%AE%E5%BE%A9windows-10/d10428fd-bda7-4e9d-b35f-b36c3eeaf9b0

您好,
理解到您在使用Windows 10 系統時遇到問題。
建議您可以先對現在安裝的顯示卡驅動程式進行調整,如果現在是最新的版本,您可以試試重新安裝舊的驅動程式,看看使用情況。
關於Icon Cache的重設動作,您可以試試下面的動作:
1. WIN+X後,按A,叫出命令提示字元(管理員)
2. 輸入下面的指令,按Enter執行
ie4uinit.exe -show 
taskkill /IM explorer.exe /F 
DEL /A /Q "%localappdata%\IconCache.db" 
DEL /A /F /Q "%localappdata%\Microsoft\Windows\Explorer\iconcache*"
shutdown /r 0
希望以上資訊能幫到您。

[技術] 免安裝! 如何移除/刪除 無法移除的dll檔

http://dreamyeh.pixnet.net/blog/post/32181563-%5B%E6%8A%80%E8%A1%93%5D-%E5%85%8D%E5%AE%89%E8%A3%9D%21-%E5%A6%82%E4%BD%95%E7%A7%BB%E9%99%A4-%E5%88%AA%E9%99%A4-%E7%84%A1%E6%B3%95%E7%A7%BB%E9%99%A4%E7%9A%84dll

2019年3月9日 星期六

再探ASP.NET大排長龍問題(seesion lock)

https://blog.darkthread.net/blog/aspx-session-lock/

2019年3月7日 星期四

Visual Studio各種快捷鍵列表

Visual Studio各種快捷鍵列表

http://milktealiny.pixnet.net/blog/post/63316539-%5B%E5%BF%AB%E9%80%9F%5Dvisual-studio-%E5%BF%AB%E6%8D%B7%E9%8D%B5%E5%88%97%E8%A1%A8

快捷鍵組合
說明
CTRL + F4
關閉程式頁籤
SHIFT + ALT + ENTER     
切換全螢幕顯示
CTRL + F
尋找
CTRL + SHIFT + F      
在檔案中尋找
CTRL + H
取代
CTRL + SHIFT + H      
在檔案中取代
CTRL + 左右方向鍵      
一次移動一個單詞
CTRL + 上下方向鍵      
滾動程式編輯區,但不移動游標位置
CTRL + Page Up       
游標移動到目前程式編輯區的最上方
CTRL + Page Down      
游標移動到目前程式編輯區的最下方
CTRL + SHIFT + 左右方向鍵  
一次移動多選取一個單詞
SHIFT + 上下方向鍵     
上下移動選取區塊
CTRL + M M         
隱藏或展開游標所在的region的折疊狀態
CTRL + M L         
將所有過程設置為相同的隱藏或展開狀態
CTRL + G
移動到指定行號位置
CTRL + A
全選
CTRL + C
複製
CTRL + V
貼上
CTRL + Z
復原
CTRL + Y
取消復原
CTRL + SHIFT + Z      
復原關閉的程式編輯視窗(UndoClose)
SHIFT + ALT + 方向鍵    
選擇矩形區塊
ALT + 滑鼠左鍵       
選擇矩形區塊
CTRL + SHIFT + U      
反白區塊文字變為大寫
CTRL + U
反白區塊文字變為小寫
CTRL + SHIFT + L      
刪除目前行
CTRL + X
刪除目前行
CTRL + K C         
註解選定內容
CTRL + K U         
取消註解選定內容
CTRL + K X         
插入程式區段
CTRL + K S         
插入外側代碼
Tab   
增加縮排
SHIFT + Tab        
減少縮排
F12   
移到定義
SHIFT + F12        
尋找所有參考
CTRL + K T         
檢視呼叫階層
SHIFT  + F7        
切換「設計檢視」以及「原始檔」顯示
CTRL + ALT + L       
檢視方案總管
CTRL + ALT + X       
檢視工具列
F4   
檢視屬性(Properties)
CTRL + ALT + O       
檢視輸出
CTRL + \ E         
檢視錯誤清單(ErrorList)
CTRL + \ T         
檢視工作清單(TaskList)
CTRL + SHIFT + J      
更新JScriptIntellisense(於網頁設計畫面或JavaScript中使用才會更新)