如题

 

已经找到解决方法,一直没时间传上来和大家分享一下,

使用的是itextsharp

 

    /// <summary>
    /// 合并PDF文件
    /// </summary>
    /// <param name="lstFiles">要合并的文件列表</param>
    /// <returns></returns>
    private bool MergePDF(List<string> lstFiles)
    {
        bool bReturn = false;
        try
        {
            int f = 1;
            PdfReader reader = new PdfReader(lstFiles[f]);           
            int n = reader.NumberOfPages;
            Document document = new Document(reader.GetPageSizeWithRotation(1));           
            PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(lstFiles[0], FileMode.Create));           
            document.Open();
            PdfContentByte cb = writer.DirectContent;
            PdfImportedPage page;
            int rotation;
            while (f < lstFiles.Count)
            {
                int i = 0;
                while (i < n)
                {
                    i++;
                    document.SetPageSize(reader.GetPageSizeWithRotation(i));
                    document.NewPage();
                    page = writer.GetImportedPage(reader, i);
                    rotation = reader.GetPageRotation(i);
                    if (rotation == 90 || rotation == 270)
                    {
                        cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
                    }
                    else
                    {
                        cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                    }
                }
                f++;
                if (f < lstFiles.Count)
                {
                    reader = new PdfReader(lstFiles[f]);                   
                    n = reader.NumberOfPages;                   
                }
            }
            document.Close();
            bReturn = true;           
        }
        catch
        {
            bReturn = false;           
        }
        return bReturn;
    }
}

posted @ 2008-06-20 17:07 singleblue 阅读(255) | 评论 (0)编辑

ReportDocument rptDocument;
rptDocument.SetDataSource(myDS);
CrystalDecisions.Shared.ReportPageRequestContext rprc 
    = new CrystalDecisions.Shared.ReportPageRequestContext();
int totalPCount = rptDocument.FormatEngine.GetLastPageNumber(rprc);

posted @ 2008-06-20 16:39 singleblue 阅读(143) | 评论 (0)编辑

<!--
//学习一下如何利用js来操作cookie

//写入 cookie
//不区分 cookieName 的大小写
//不考虑子键
function WriteCookies(cookieName, cookieValue, expires)
{
    if (expires)
    {
        //指定了 expires
        document.cookie = 
            WriteCookies_GetCookieName(cookieName) + "=" + escape(cookieValue) 
            + "; expires=" + xpires.toGMTString();
    }
    else
    {
        document.cookie = WriteCookies_GetCookieName(cookieName) + "=" + escape(cookieValue);
    }
}

//获取并返回与 cookieName 同名的 cookie 名称,允许大小写不同
//如果不存在这样的 cookie,就返回 cookieName
function WriteCookies_GetCookieName(cookieName)
{
    var lowerCookieName = cookieName.toLowerCase();
    var cookieStr = document.cookie;
   
    if (cookieStr == "")
    {
        return cookieName;
    }
   
    var cookieArr = cookieStr.split("; ");
    var pos = -1;
    for (var i=0; i<cookieArr.length; i++)
    {
        pos = cookieArr[i].indexOf("=");
        if (pos > 0)
        {
            if (cookieArr[i].substring(0, pos).toLowerCase() == lowerCookieName)
            {
                return cookieArr[i].substring(0, pos);
            }
        }
    }
   
    return cookieName;
}

//获取并返回 cookie 值
//不区分 cookieName 的大小写
//dfltValue 为默认返回值
//不考虑子键
function ReadCookies(cookieName, dfltValue)
{
    var lowerCookieName = cookieName.toLowerCase();
    var cookieStr = document.cookie;
   
    if (cookieStr == "")
    {
        return dfltValue;
    }
   
    var cookieArr = cookieStr.split("; ");
    var pos = -1;
    for (var i=0; i<cookieArr.length; i++)
    {
        pos = cookieArr[i].indexOf("=");
        if (pos > 0)
        {
            if (cookieArr[i].substring(0, pos).toLowerCase() == lowerCookieName)
            {
                return unescape(cookieArr[i].substring(pos+1, cookieArr[i].length));
            }
        }
    }
   
    return dfltValue;
}


//test all the oper

document.write("写入名称为 cv 的 cookie...<br>");
WriteCookies("test", "test123", null);

document.write("写入名称为 Ab,带失效日期的 cookie...<br>");
var expires = new Date("December 11, 2010");
WriteCookies("singleblue", "test234", expires);

document.write("读取名称为 singleblue 的 cookie..." + ReadCookies("ab", ""));
-->

posted @ 2008-06-11 10:25 singleblue 阅读(198) | 评论 (2)编辑
今天coding时,发现系统有一个地方是需要做全角自动转半角的,就从网上搜到了下面的东西
检查全角半角
var s = "bABD1232232";
var strCode;
for(var i=0;i<s.length;i++)
{
    strCode = s.charCodeAt(i);
    if((strCode>65248)||(strCode==12288))  //12288是空格
    {
        alert("有全角!");
        break;
    }
}
半角字符由一个字节保存,全角字符用两个字节保存,所以码值的绝对值小于256的就是半角,否则就是全角。
全角转半角的函数
function DBC2SBC(str)
{

var result = '';
for(var i=0;i<str.length;i++){
code = str.charCodeAt(i);                         //获取当前字符的unicode编码
if (code >= 65281 && code <= 65373)     //在这个unicode编码范围中的是所有的英文字母已及各种字符
{
    result += String.fromCharCode(str.charCodeAt(i) - 65248);
    //把全角字符的unicode编码转换为对应半角字符的unicode码
}else if (code == 12288)//空格
{
    result += String.fromCharCode(str.charCodeAt(i) - 12288 + 32);
}else
{
    result += str.charAt(i);
}
}
return result;
}
javascript是16位编码
65281到65373只有这里面的数据才是全角,这里要有范围限制的
关于65281的算法是这么来的
比如全角的字符A
编码为FF21
转成16进制是
1111 1111 0010 0001
对两个字节分别取10进制的值
第一个字节是
65280
第二个字节是
33
所以a的65313

对这个编码减去
65248得半角的

65248比65280小32
所以我想ASC码小于32的就不能转换
因为转换了字符编码的前一字节就不能是1111 1111即FF
就会比这个小,那应该就不是全角了
就是说第一字节不能满足全为1

posted @ 2008-06-06 15:44 singleblue 阅读(321) | 评论 (1)编辑

如题,也可以用现今较为流行的js框架来实现,会较为简单,现今的js框架大多数都有封装好支持多种浏览器的创建方式
var xmlHttp = false;
/*@cc_on
@*/
/*@if(@_jscript_version>=5)
try
{
    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
    try
    {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch(e2)
    {
        xmlHttp= false;
    }
}
@end @*/
if(!xmlHttp && typeof XMLHttpRequest != 'undefined')
    xmlHttp = new XMLHttpRequest();

posted @ 2008-06-05 15:55 singleblue 阅读(232) | 评论 (1)编辑

1.项目到项目的引用
 在解决方案包含多个项目,一个项目需要引用同一个解决方案中的另一个项目时使用。在解决方案上进行构建时,这类引用会自动更新。项目包含在解决方案时,建议使用这类引用。Visual Studio在解决方案文件中添加ProjectReferences标记项目,来跟踪这类引用。也就是说,如果另一个解决方案中也使用了这个项目,而它有项目到项目的引用,就必须重新建立它们。
2.Bin
 这表示引用的是应用程序的bin目录外部的一个共享组件,该组件没有在全局程序集缓存(Global Assembly Cache,GAC)中注册。在引用时,这些项会复制到bin目录下,在默认情况下仅在构建过程中更新。如果查看一下该文件夹,除了程序集之外,还创建了一个<assemblyname>.dll.refresh文件。在该文件中包含了位置的引用,生成一个新副本。如果删除了这个文件,在构建过程中就不生成新副本。
3.GAC
   用全局程序集缓存(GAC)注册的项不复制到项目的bin文件夹下。在web.config文件的编译部分,会添加一个新项,以跟踪对GAC组件的引用。这不是一个副本文件,所以会自动更新,选择安装到GAC中的当前版本
4.Web引用
 这类引用用于跟踪Web服务的注册。在添加一个新的web引用时,会创建一个新的app_WebReferences文件夹,其中包含所生成的客户代理文件。只有在Visual Studio Solution Explorer的app_WebReferences文件夹选择Update Web References,才会更新这些引用。

   以上是从书上看到的一些东东,感觉了解一下也好

posted @ 2008-06-04 10:59 singleblue 阅读(128) | 评论 (0)编辑