반응형

프로젝트 진행중에 Excel데이터를 생성하는 내용이 있었다.

로컬테스트 할때는 문제가 없었으나 외부접근테스트를 하게되니 바로 아래와 같은 에러가 발생했다.


80070005 액세스가 거부되었습니다. (예외가 발생한 HRESULT: 0x80070005 (E_ACCESSDENIED)) 오류로 인해 CLSID가 {00024500-0000-0000-C000-000000000046}인 구성 요소의 COM 클래스 팩터리를 검색하지 못했습니다.


해결법을 찾기 위해 하루종일 자료를 찾다가 우연히 해결법을 찾았다.

결론부터 말하자면 Web.Config에 <identity impersonate="true" userName="YourID" password="Password"/>

을 추가해 주면 된다.


웹관련 보안설정으로 DCOM구성ㅇ에 Excel권한이 어쩌고 저쩌고 하는 방법으로 해결하라는데 잘안된다.

보안설정에 as.pnet계정을 추가해줘야하는데 어찌된 영문인지 asp.net계정을 추가할 수가 없었다.


차선책을 찾다가 겨우 찾았다. 


출처는 : http://support.microsoft.com/?id=306158#2



반응형

itextsharp.dll


itextsharp.pdfa.dll


using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;


public partial class _Default : System.Web.UI.Page
{
 
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
 

        }
    }
 
    protected void Button1_Click(object sender, System.EventArgs e)
    {
        String htmlText = "<font  " +
         " color=\"#0000FF\"><b><i>Title One</i></b></font><font   " +
         " color=\"black\"><br><br>Some text here<br><br><br><font   " +
         " color=\"#0000FF\"><b><i>Another title here   " +
         " </i></b></font><font   " +
         " color=\"black\"><br><br>Text1<br>Text2<br><OL><LI><DIV Style='color:green'>Pham Duy Hoa</DIV></LI><LI>how are u</LI></OL><br/>"+
         "<table border='1'><tr><td style='color:red;text-align:right;width:20%'>123456</td><td style='color:green;width:60%'>78910</td><td style='color:red;width:20%'>ASFAFA</td></tr><tr><td style='color:red;text-align:right'>123456</td><td style='color:green;width:60%'>78910</td><td style='color:red;width:20%'>DAFSDGAFW</td></tr></table><br/>"+
         "<div><ol><li>123456</li><li>123456</li><li>123456</li><li>123456</li></ol></div>";
 

 
        HTMLToPdf(htmlText, "PDFfile.pdf");
    }
 
    public void HTMLToPdf(string HTML, string FilePath)
    {
        Document document = new Document();
 
        PdfWriter.GetInstance(document, new FileStream(Request.PhysicalApplicationPath + "\\Chap0101.pdf", FileMode.Create));
        document.Open();
        Image pdfImage = Image.GetInstance(Server.MapPath("logo.png"));
 
        pdfImage.ScaleToFit(100, 50);
 
        pdfImage.Alignment = iTextSharp.text.Image.UNDERLYING; pdfImage.SetAbsolutePosition(180, 760);
 
        document.Add(pdfImage);
        iTextSharp.text.html.simpleparser.StyleSheet styles = new iTextSharp.text.html.simpleparser.StyleSheet();
        iTextSharp.text.html.simpleparser.HTMLWorker hw = new iTextSharp.text.html.simpleparser.HTMLWorker(document);
        hw.Parse(new StringReader(HTML));
        document.Close();
        ShowPdf("Chap0101.pdf");
    }
    private void ShowPdf(string s)
    {
        Response.ClearContent();
        Response.ClearHeaders();
        Response.AddHeader("Content-Disposition", "inline;filename=" + s);
        Response.ContentType = "application/pdf";
        Response.WriteFile(s);
        Response.Flush();
        Response.Clear();
    }
}

출처 : http://www.codeproject.com/Questions/203481/HTML-convert-to-PDF-using-itextsharp

html 내용을 pdf로 변환해야하는 상황이 생겼다.

iTextSharp가 탁월한 해결법이 되었다.

첨부된 두 dll파일을 참조해서 예제를 실행하면 된다.

참고로 이소스가 필요했던 이유는 그래프와 html table셑을 하나의 결과물로 받아보기를 원하는 고객의 요구에 부응하기 

위해서 였다. mschart를 써서 그래프를 그린후 이미지파일로 저장하고 이를 다시 PDF문서에 그래프 + <table></table>구조로

파싱하는 구조다. 이거 알아내는데 하루가 꼬박 걸렸다.

반응형

var embed = document.getElementsByTagName('embed');

for(var i = 0; i < embed.length; i++){

    embed[i].setAttribute('wmode','opaque');

}

// FF does a "live" array when working directly with elements,

// so "els" changes as we add/remove elements; to avoid problems

// with indexing, copy to a temporary array

var els = document.getElementsByTagName('object');

var obj = [];

for(var i = 0; i < els.length; i++){

   obj[i] = els[i];

}

for(var i = 0; i < obj.length; i++){

    var param = document.createElement('param');

    param.setAttribute('name','wmode');

    param.setAttribute('value','opaque');

    obj[i].appendChild(param);


    var wrapper = document.createElement('div');

    obj[i].parentNode.appendChild(wrapper);


    if(obj[i].outerHTML){

        // IE

        var html = obj[i].outerHTML;

        obj[i].parentNode.removeChild(obj[i]);

        wrapper.innerHTML = html;

    }else{

        // ff/chrome

        obj[i].parentNode.removeChild(obj[i]);

        wrapper.appendChild(obj[i]);

    }

}


출처 : http://stackoverflow.com/questions/534474/changing-arbitrary-flash-objects-wmode-to-transparent


플래시객체를 웹에서 사용했을 경우 플래시객체 상위레이어로 html 객체가 올라가야하는 경우가 있는데 도통 방법을 못찾다가

찾은 방법이다. 문서내의 embed객체를 일괄로 적용하는 방법인 듯 하다.

반응형

FileRenames.zip


미드 다운받아서 보는데 자막명과 파일명이 일치하지 않는 것을 일일이 맞추는게 귀찮아서 만들었다.

.Net FrameWork 4.0으로 만들었고... 기능이랄 것은 없고 영상폴더를 선택해서 이름을 지정해주면 동일한 이름에 순번을 붙여서 바꿔준다.

영상을 변경한후에 자막폴더를 선택해서 마찬가지로 적용해주면 된다.


※ 영상과 자막을 한폴더에 몰아넣고 한번에 변경하면 안된다. 귀찬아서 만든 프로그램이므로 많은 것을 기대하지 말자. ㅎㅎㅎ

반응형

1. database가 복구할 pc에 생성되어있어야 한다.

2. 작업은 MySQL Command 콘솔에서 한다.

3. MySQL 로그인후

4. use databasename; 실행

    - 어떤 데이터베이스를 복구할 것인지 선택해야하니까.

5. source c:/folder/source_file.sql; 실행

    - 복구 명령 끝


아주 간단하다. 이걸 몰라서 한참을 해맸다.

반응형

RadioButton을 2.0에서 서버컨트롤로 사용했다. <asp:DropDownList>의 선택값이 변할때 마다 RadioButton의 text값이 변하도록 

해야했으나 문제는 <asp:DropDownList>이 MasterPage상에 있어서 종속된 페이지에서 이를 서버코드로 제어할 수 없는 문제가 

있었던 것이다.


1.dropdownlist를 선택할때마다 radiobutton의 text를 변경

2.dropdownlist는 마스터페이지에 radiobutton은 종속페이지에 위치


이런 제약조건때문에 서버페이지에서 종속페이지의 컨트롤을 직접 제어할 수도 없는 난점때문에 자바스크립트로 해결하기로 했다.


$(document).ready(function(){

$('#dropdownlist').live('change',function(){

   var _chkcode = $('#dropdownlist_ClientID option:selected').val();

  var tags = document.getElementsByTagName('label');

  for(var i = 0; i < tags.length; i++){

if(tags[i].getAttribute('for') == 'RadioButton_ClientID'){

if(_chkcode == 'Code01'){

   tags[i].innerHTML = '텍스트1';

}

else if(_chkcode == 'Code02'){

   tags[i].innerHTML = '텍스트2';

}

}

}

});

});;


위와같은 방법으로 해결했다. 

<asp:RadioButton>은 html로 변환될경우 <input id='clientID' type='radio' value='serverID'/><label for='clientID'>텍스트</label> 로 

변환된다. 결국 Radio버튼의 text값은 <label for='clientID'의 값을 변경해야 하는 것이다. 그런데 <label은 id가 없기때문에

var tags = document.getElementsByTagName('label'); 이런식으로 label개체들을 for로 처리하여 해결한다.

tags[i].getAttribute('for') == 'RadioButton_ClientID' 이부분이 내가 원하는 label개체를 선별할 수 있도록 해준다. 


나머지는 일사천리~

반응형

asp.net2.0 용으로 만들어진 Open Flash Chart(이하 ofc)라이브러리를 사용하면서 생긴 몇가지 문제에 대한 팁이다.


1. 한글이 깨지는 문제

asp.net프로젝트가 한글로 만들어져있고 실행에도 문제가 없음에도 불구하고 유독 ofc에서 한글이 깨지는 문제가 발생했다.

ofc로 만들어진 asp.net용 예제샘플을 실행해보면 한글이 문제없이 출력되는데 현제 내가 작업중인 프로젝트에서만 한글이 깨진다.

문제는 web.config에 있었다.  

<globalization requestEncoding="euc-kr" responseEncoding="euc-kr" />로 되어있던 부분이 문제였다.

<globalization requestEncoding="utf-8" responseEncoding="utf-8" /> 이렇게 utf-8로 변경하니 문제없이 출력이 된다.


2. LineChart에서 출력값중에 0 보다 작은 값(-값)이 있을 경우

마이너스 값을 설정할 경우 ofc가 응답을 하지 않는 경우가 있다.

ofc는 MaxY를 설정할 수 있다. 마찬가지로 MinY값을 설정할 수 있다. 최대값과 최소값을 설정할때 최소값에 마이너스 값중 

제일 작은 값을 설정하면 된다.


3. ofc X값들의 간격설정

x값들이 너무 많으면 차트의 x값들의 Y축 라인들이 너무 세밀하게 나와서 보기가 불편하다.

Chart.AxisStepsX = int value; 정수값으로 간격범위를 설정해주면 간단하게 해결된다.

반응형

Response.Expires = 0;

Response.Cache.SetNoStore();

Response.AppendHeader("Pragma", "no-cache");


OpenFlashChart를 asp.net2.0에 참조 하였더니 ie에서 문제가 발생했다.

Chart를 재생성할때마다 서버에 접근해야 하는데 캐쉬문제 때문인지 서버에 접근하지 않고 최초에 생성한 Chart가 반복되는 현상이 발생했다.

(크롬에서는 발생하지 않는 문제) 이를 해결하기 위해 해당 페이지에 상기의 코드를 추가 한다.


반응형
var regExp = /([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;

    if (!regExp.test('Email@Address.com')) {
        return false;
    }
    else {
        return true;
    }
 
반응형
UPDATE TAB1 SET 
EMPLOYEES = '20090801'
FROM TAB1 A
LEFT JOIN (
SELECT 
     TASK_MAIN_CODE
   , REG_DATE
   , TASK_SUB_CODE 
FROM TAB2
WHERE TASK_MAIN_CODE = '조건1' 
AND REG_DATE = '조건2'
AND ISNULL(DELETE_FLAG,'0') = '0'
GROUP BY TASK_MAIN_CODE, REG_DATE, TASK_SUB_CODE

) B
ON A.CODE = B.TASK_MAIN_CODE
AND A.REG_DATE = B.REG_DATE
AND A.SUB_CODE = B.TASK_SUB_CODE
 
WHERE A.CODE = '조건1'
AND A.REG_DATE = '조건2'
AND ISNULL(A.DELETE_FLAG,'0') = '0'
AND  ISNULL(B.TASK_MAIN_CODE,'-1') = -1

tab2가 tba1을 외부참조한상태에서  tab1은 tab2에 연결(외부참조한) 데이터가 없는 값만 update하려는 쿼리이다.
tab1와 tab2가 1:n의 관계이기 때문에 서브쿼리로 group by한상태에서 left join하였고 tab2의 TASK_MAIN_CODE 값이 없는
(isnull로 -1처리된) 결과값들만 update하도록 작성된 쿼리이다.

+ Recent posts